我试图列出一个函数列表,从中我可以随机提取其中一个函数。我尝试了几种方法,既试图使其主动选择列表中的第二个函数,又试图使其随机化。都失败了。
如果列表中包含文本而不是函数,则该列表可以正常工作。
尽管我没有调用q = [opt1(), opt2(), opt3()]
,但它也激活了该功能。
如何使它从列表中随机提取其中一个功能?
import random
def opt1():
print("hej1")
def opt2():
print("hej2")
def opt3():
print("hej3")
q = [opt1(), opt2(), opt3()]
health = "100"
p = "1"
print("you have ", p, " potions")
print("Your health is ", health,)
while True:
a = input("A =")
if a == "add":
health = int(health)
p = int(p) + 1
print("you have ", p, " potions")
print("Your health is ", health,)
a = input("A =")
if a == "fight":
q[1]
#random.choice(q)
答案 0 :(得分:2)
将功能添加到列表中时,只需删除()
。所以这行是问题所在:
q = [opt1(), opt2(), opt3()]
通过包含()
来您正在做的是调用函数并将函数调用的结果添加到列表中,而不是将函数本身添加到列表中。下面的代码应该大致满足您的需求
import random
def opt1():
print("hej1")
def opt2():
print("hej2")
def opt3():
print("hej3")
q = [opt1, opt2, opt3]
randomFunction = random.choice (q)
randomFunction()
答案 1 :(得分:0)
首先将您的列表q调整为此:
q = [opt1, opt2, opt3]
否则,您已经在调用函数了。
然后我建议您定义一个索引:
ind = random.randint(0,len(q)-1)
从列表中选择一个随机函数。 现在剩下要做的就是在其后面放置括号:
q[ind]()