Python 带函数的列表

Python 带函数的列表,python,python-3.x,list,function,Python,Python 3.x,List,Function,我试图制作一个函数列表,从中可以随机抽取其中一个函数。我尝试了几种方法,既尝试让它主动选择列表中的第二个函数,又尝试使其随机。两者都失败了 如果列表中包含文本而不是函数,则该列表可以正常工作。 q=[opt1()、opt2()、opt3()]也会激活该函数,尽管我没有调用它们 如何使它从列表中随机抽取一个函数 import random def opt1(): print("hej1") def opt2(): print("hej2") def opt3(): p

我试图制作一个函数列表,从中可以随机抽取其中一个函数。我尝试了几种方法,既尝试让它主动选择列表中的第二个函数,又尝试使其随机。两者都失败了

如果列表中包含文本而不是函数,则该列表可以正常工作。
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)

首先,将您的列表q调整为:

q = [opt1, opt2, opt3]
否则,您已经在调用这些函数了

然后我建议您定义一个索引:

ind = random.randint(0,len(q)-1)
这将从列表中选择一个随机函数。 现在唯一要做的就是把括号放在后面:


q[ind]()

将函数添加到列表时,只需删除
()
。所以这条线就是问题所在:

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

“激活函数,尽管我没有调用它们”–
opt1()
是一个函数调用。只要在函数后面放上括号,就可以调用函数。所以,只需将函数名放在列表中。为什么您认为您不调用它们?将函数名放在列表中,并在选择它们时调用它们。。。并用
q[1]()
调用它-如果需要的话,还必须弄清楚如何为函数提供参数