首页 > 解决方案 > 我可以一次只打印其中一个问题吗?

问题描述

我需要随机化一些问题,一次得到一个问题。我的列表中有大约 200 个问题,我希望我的 python 代码从 200 个中随机选择一个。然后我希望它从列表中删除所有已经打印的问题,这样它们就不会再次出现。我当前的代码随机化了这些问题的出现顺序。有没有办法让它打印输出中的第一个问题,然后打印第二个,然后一次打印第三个?这是我的代码的外观(除了 200 个问题):

import random

questions = [
    'define math',
    'define french',
    'define english',
    'define spanish',
    'define czech',
    'define slovak',
    'define whatever',
]

while questions:

    index = random.randrange(0, len(questions))

    selected = questions[index]
    questions.pop(index)
    
    print(selected)

我的输出(每次运行时都会看起来不同,因为它是随机的)看起来像这样

define czech
define math
define whatever
define french
define english
define slovak
define spanish

我可以让它自己打印“定义捷克语”,然后当我再次运行代码时,“定义数学”出现,然后“定义任何东西”以随机顺序出现?任何帮助将不胜感激!

标签: pythonrandom

解决方案


random.choice 一次选择一个元素,random.choices有选择限制,选择要选择多少个元素,这里我将其设置为 3。picked_questions 列表将检查问题是否重复。

import random

questions = [
    'define math',
    'define french',
    'define english',
    'define spanish',
    'define czech',
    'define slovak']
    
elems = random.choices(questions, k=3) # using choices this time and limit them to pick up 3 random elements you can set it to 1 to meet ur needs.i just wanna show u a method which match ur actual and next needs

picked_questions = ["define english", "define spanish", "define slovak"] # suppose those questions are already picked to check the condition success

for i in elems:
  for x in picked_questions:
    if i not in picked_questions:
      picked_questions.append(i)  # this could be optimized using list comprehension

print(elems, '\n') 
print(picked_questions)

随机输出 3 个选项

['define english', 'define math', 'define czech'] # 3 random elements are picked up

['define english', 'define spanish', 'define slovak', 'define math', 'define czech'] # no repeated questions, math and czech questions are appended coz they are not repeated. 

通过设置 k = 1 随机输出 1 个选项

['define czech'] 

['define english', 'define spanish', 'define slovak', 'define czech']

成功完成


推荐阅读