【问题标题】:List with functions功能列表
【发布时间】:2018-09-12 11:17:52
【问题描述】:

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

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

【问题讨论】:

  • "尽管我没有调用它们,但仍激活函数"opt1() 函数调用。
  • 只要在函数后面加上方括号,就可以调用该函数。因此,只需将函数名称放在列表中即可。
  • 你为什么不给他们打电话?
  • 将函数名称放入列表中,并在它们被选中时调用它们。
  • .. 并使用q[1]() 调用它 - 如果需要,您必须弄清楚如何为您的函数提供参数

标签: python python-3.x list function


【解决方案1】:

您只需在将函数添加到列表时删除()s。所以这一行就是问题所在:

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

【讨论】:

    【解决方案2】:

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

    q = [opt1, opt2, opt3]
    

    否则你已经在调用函数了。

    那我建议你定义一个索引:

    ind = random.randint(0,len(q)-1)
    

    这会从列表中选择一个随机函数。 现在唯一要做的就是在后面加上括号:

    q[ind]()

    【讨论】:

      猜你喜欢
      • 2013-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多