在范围内生成随机数而不重复

时间:2015-05-15 17:54:01

标签: python function random

我正在创建一个琐事游戏,需要以随机顺序调用10个问题(函数)。我可以简单地生成一个随机整数1-10并使用if语句来调用每个函数,但我需要确保不会多次调用任何问题,因此我需要生成随机数而不重复。

def Trivia_Snap():
    question_1()
    question_2()
    question_3()
    question_4()
    question_5()
    question_6()
    question_7()
    question_8()
    question_9()
    question_10()

4 个答案:

答案 0 :(得分:4)

您可以将调用放入列表

l = [question_1, question_2...]

然后从该列表中随机选择而无需替换

import random
rand_l = random.sample(l, len(l))

for f in rand_l:
    f()

编辑:根据以下评论,您还可以使用shuffle

random.shuffle(l)
for f in l:
    f()

答案 1 :(得分:2)

>>> import random

创建一个数字列表

>>> l = range(0,11)
>>> l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

...并使用random.shuffle()

将它们随机播放
>>> random.shuffle(l)
>>> l
[5, 7, 4, 2, 1, 8, 6, 10, 9, 0, 3]
>>> random.shuffle(l)
>>> l
[1, 5, 9, 4, 10, 6, 2, 7, 0, 3, 8]

答案 2 :(得分:1)

import random

qlist = [i for i in range(0,10)]
random.shuffle(qlist)

for q in qlist:
    print q

答案 3 :(得分:1)

假设您有一个问题列表:

questions = ['Q: foo?', 'Q: bar?', Q: 'baz?']

使用以下功能,您可以提供所有这些问题供用户回答。每次调用该函数时,问题都将以不同的顺序显示。它将返回一个元组列表,其中每个元组表示从原始问题列表中列举的已回答问题的编号,以及问题的答案:

from random import shuffle

def trivia_snap(questions):
    q = list(enumerate(questions))
    shuffle(q)
    answers = []
    for question in q:
        answers.append((question[0], input(question[1] + " Answer: ")))
    return sorted(answers)


>>> trivia_snap(questions)
>>> Q: foo? Answer: "Homer"
>>> Q: baz? Answer: "Marge"
>>> Q: bar? Answer: "Lisa"
>>> [(0, "Homer"), (1, "Lisa"), (2, "Marge"), ] 

希望它有所帮助!