随机调用函数到execu

2024-09-28 22:43:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我做了一份简短的调查问卷:

from random import randint

def pancakes():
    q = raw_input("Do you like pancakes?")
    if q == "yes":
        print("Great!")
    elif q == "no":
        print("Hmmm...")

def french_toast():
    q = raw_input("Do you like french toast?")
    if q == "yes":
        print("Oh!")
    elif q == "no":
        print("Same here!")

def random():
    num = 2
    while num > 0:
        random = randint(1, 2)
        if random == 1:
            num = num -1
            pancakes()
         elif random == 2:
             num = num -1
             french_toast()

random()

我在这里的目标是让问题随机排列。但有时同一个问题会被问两次,因为它是随机选择的。在

我怎么能让它只问一次同样的问题?在


Tags: youinputrawifdefrandomdonum
3条回答

我建议您将for循环与random.sample结合使用,而不是while循环。事先创建要提供给sample的函数列表:

from random import sample

funcs = [french_toast, pancakes]
for func in sample(funcs, len(funcs)):
    func()

这将在每次迭代中随机选择一个函数来遍历所有函数。在

或者,您可以使用shuffle对列表进行random.shuffle进行shuffle,然后对其进行迭代,这样也会更快(不过,速度不应该是这里最关心的问题):

^{pr2}$

如果需要,请将它们放入函数中:

from random import shuffle

# use *funcs for passing arbitrary number of 
# functions as positional arguments.
def call_funcs_randomly(funcs):
    shuffle(funcs)
    for func in funcs:
        func()

打电话给他们:

^{4}$

正如一条注释所指出的,不要使用random作为函数名,它有可能掩盖模块random,从而导致奇怪的错误。在

你的最后一个问题(random不是一个好名字)如何!您可能会覆盖同名的模块[尽管现在这样做很好])

def random_questions():
    eligible_questions = [pancakes, french_toast]
    while eligible_questions:
        question = random.choice(eligible_questions)
        eligible_questions.remove(question)
        question()

把问题放在一个列表中,用^{}选择一个,从列表中删除并执行它。如果问题列表为空,则停止。这样每个问题都只选一次。在

如果你想增加更多的问题,这很容易扩展。在

再想一想:Jim Fasarakis-Hilliard's answer中的shuffle版本要干净得多!在

我会使用random.sampleLink。只需为你的问题创建一个索引列表,并从中抽取2个。在

编辑:

此外,您可以使用random.shuffleLink

random.shuffle(questions)
for question in questions:
    # process your random question once 

相关问题 更多 >