Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python random.choice-TypeError:';方法';对象不可下标_Python - Fatal编程技术网

Python random.choice-TypeError:';方法';对象不可下标

Python random.choice-TypeError:';方法';对象不可下标,python,Python,我的评估任务要求我们创建一个程序,询问10个随机生成的问题;由减法/乘法/加法组成,我已经完成了随机生成问题的代码,但我不明白为什么会出现相同的错误,请有人看一下,错误是: Traceback (most recent call last): File "N:\Open Me x\Computing\Mrs Farakh\Programming\Python\srg.py", line 71, in <module> random.choice[(add(),mult()

我的评估任务要求我们创建一个程序,询问10个随机生成的问题;由减法/乘法/加法组成,我已经完成了随机生成问题的代码,但我不明白为什么会出现相同的错误,请有人看一下,错误是:

Traceback (most recent call last):
  File "N:\Open Me x\Computing\Mrs Farakh\Programming\Python\srg.py", line 71, in <module>
    random.choice[(add(),mult(),subtr())]
TypeError: 'method' object is not subscriptable
对不起,我现在又是python的宠儿了,所以如果您能帮我理解为什么发生了错误,同时回答我的问题,那将非常有帮助:)

编辑:

对不起,我忘了说,当subtr函数发生时会发生错误,其他函数工作正常。

这就是问题所在:

random.choice[(add(),mult(),subtr())]
将其替换为以下内容:

random.choice((add(),mult(),subtr()))

random.choice
是一个函数,您需要使用列表(或其他集合)调用它

此外,您不能将函数调用放在该列表中,因为这将首先调用所有三个函数,然后调用
random.choice

相反,将函数(未调用)放入一个列表中,将该数组传递给
random.choice
,然后调用生成的(随机选择的)函数:

possible_choices = [add, mult, subtr]
choice = random.choice(possible_choices)
choice()
choice
是一个随机选择的函数,因此我们可以调用它。然而,许多人会觉得这段代码过于冗长,因为它不需要创建中间变量。您可以将整个逻辑放入一个表达式中:

random.choice([add, mult, subtr])()

使用
()
调用函数/方法而不是
[]
。为什么它是双括号而不是单括号。random.choice(add()、mult()、subtr())?@Razor,因为您使用单个参数、三元组函数而不是三个单独的参数调用
choice
。实际上,您应该将括号从元组中的函数中去掉—您希望存储它们,而不是全部调用它们。
random.choice([add, mult, subtr])()