TypeError:'bool'对象不可调用 - python

时间:2014-11-25 13:45:14

标签: python

我试图实现一个简单的数学游戏,其中用户被给予随机数和运算符然后他们必须找出答案,我在互联网上找到建议使用运算符模块的源,这就是为什么我使用它,如果有更有效/更容易的方法实现这一点,我非常乐于解释。

基本上我正试图删除这个可怕的<built-in function add>,并通过说&#39; +&#39;来交换它以使用户更友好。或者&#39;添加&#39;,沿着这些方向,但我不断收到错误&#39; TypeError:&#39; bool&#39;对象不可调用 - python&#39;,我真的不知道这意味着什么,我是python的新手并且非常困惑。

 from operator import add, sub, mul, floordiv

 operators = (add == str("add"), sub == str("subtract"), mul == str("multiply"), floordiv == str("divide"))
 operator = random.choice(operators)
 answer = operator(number1, number2)
 question = print("What is ", number1, operator, number2, "?")

4 个答案:

答案 0 :(得分:2)

第一行的结果是

operators = (False, False, False, False, False)

或那些行中的某些内容。

然后你试图调用一个布尔值来获得你的异常。

add == str("add")将评估为False,因为您正在尝试将函数与字符串进行比较。

我假设你正在尝试实现一个简单的数学游戏,因此你可以使用一个简单的dictonary而不是operator,而不是operators = { 'add': add, 'substract': sub, 'multiply': mul } answer = operators[random.choice(operators.keys())](number1, number2)

{{1}}

答案 1 :(得分:2)

您需要两个单独的东西:运算符的字符串表示和运算符本身。您可以使用字典来存储函数和相应的字符串表示形式:

from operator import add, sub, mul, floordiv
import random

number1 = 9
number2 = 3

operators = {'+':add, '-':sub, '*':mul, '/':floordiv}
operator_name = random.choice(operators.keys())
op = operators[operator_name]
answer = op(number1, number2)
question = "What is {}{}{}?".format(number1, operator_name, number2)
print question
print answer

答案 2 :(得分:1)

这是使用元组而不是dicts的实现,我添加了更多方式来表示每个操作。

import random
from operator import add, sub, mul, floordiv

number1 = 5
number2 = 10

operators = (
    (add, ("add", "plus", "+")),
    (sub, ("subtract", "minus", "-")),
    (mul, ("multiply", "times", "*")),
    (floordiv, ("divide", "over", "/")),
)
operator, (name, operation, symbol) = random.choice(operators)
print("What is ", number1, operation, number2, "?")
print(operator(number1, number2))

<强>输出

13:50 ~ $ python3 StackOverflow/27128400.py 
What is  5 times 10 ?
50
13:55 ~ $ python3 StackOverflow/27128400.py 
What is  5 plus 10 ?
15
13:55 ~ $ python3 StackOverflow/27128400.py 
What is  5 minus 10 ?
-5
13:55 ~ $ python3 StackOverflow/27128400.py 
What is  5 over 10 ?
0

答案 3 :(得分:0)

你在这里尝试做的当然是可能的。上面的元组的形成不会返回任何有用的东西。字典更合适。

您可以将字典构建为:

operators = {'add':add, 'minus':sub, 'multiplied by':mul, 'divided by':floordiv}

这将为您提供相关字符串和函数的字典。您可以选择一个随机运算符名称(这将给字符串值运算符本身。

operator = random.choice(list(operators.keys()))

然后计算答案:

answer = operators.get(operator)(number1, number2)

通过“搜索”其字符串伙伴来从运算符字典中获取运算符函数。

现在总共(有一些数字,所以它会蝙蝠):

from operator import add, sub, mul, floordiv
import random 

operators = {'add':add, 'minus':sub, 'multiplied by':mul, 'divided by':floordiv}
operator = random.choice(list(operators.keys()))
number1 = 2
number2 = 3
answer = operators.get(operator)(number1, number2)
print "What is " + str(number1) + " " + operator + " " + str(number2) + "?"
print answer

(我正在使用2.7)