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

Python 在不重复的范围内生成随机数,python,function,random,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()

我正在创建一个琐事游戏,需要随机调用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()
创建一个数字列表

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


您可以将对函数的调用放入列表中

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()

假设您有一个问题列表:

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"), ] 

希望有帮助

为什么不把函数放在一个列表中,然后
random.shuffle
it?然后,只需在funcs:func()中为func编写
,而不是编写十行几乎相同的代码。可能会有更广泛的修正——考虑你的代码一旦你工作了。我希望那些否决你的问题的人可以提出他们的理由……我没有投票,但是这被问了1000次,对谷歌来说很容易。这显然是最好的方法。但请注意,OP希望调用所有them@jonrsharpe这将。。。我是说我想要列表中的
len(l)
样本,所以我会得到所有样本。我的观点是,你可以只
洗牌
,而不是制作所有样本的
样本<代码>随机播放
已就位
import random

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

for q in qlist:
    print q
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"), ]