Ker*_*tto 0 python random python-2.x
我做了这个简短的问卷调查:
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()
Run Code Online (Sandbox Code Playgroud)
我的目标是以随机顺序提出问题.但有时同样的问题会被问到两次,因为它是随机选择的.
那么我怎么能让它只问一次相同的问题呢?
而不是while循环,我建议你for结合使用循环random.sample.事先创建一个函数列表以提供给sample:
from random import sample
funcs = [french_toast, pancakes]
for func in sample(funcs, len(funcs)):
func()
Run Code Online (Sandbox Code Playgroud)
现在,这将遍历所有函数,在每次迭代中随机选择一个函数.
或者,您可以shuffle使用列表(就地执行)random.shuffle然后遍历它,这也会更快(尽管速度不应该是这里最大的关注点):
from random import shuffle
funcs = [french_toast, pancakes]
shuffle(funcs)
for func in funcs:
func()
Run Code Online (Sandbox Code Playgroud)
如果需要,将它们放在一个函数中:
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()
Run Code Online (Sandbox Code Playgroud)
并打电话给他们:
call_funcs_randomly([french_toast, pancakes])
Run Code Online (Sandbox Code Playgroud)
正如注释所指出的那样,不要将其random用作函数名称,它有可能屏蔽模块random导致奇怪的错误.