首页 文章

TypeError:'bool' object不可调用 - python

提问于
浏览
0

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

基本上我想删除这个可怕的 <built-in function add> 并通过说'+'或'add'交换它更加用户友好,沿着那些线但我不断得到错误'TypeError: ' bool ' object is not callable - python',我真的不知道这意味着什么,我是新来的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 回答

  • 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
    
  • 1

    你得到的第一行的结果是

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

    或者那些行中的东西 .

    然后你试图调用一个布尔值来获取你拥有的异常 .

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

    我假设你正在尝试实现一个简单的数学游戏,因此不使用 operator ,实际上是数学运算函数,你可以使用一个简单的dictonary:

    operators = { 'add': add, 'substract': sub, 'multiply': mul }
    answer = operators[random.choice(operators.keys())](number1, number2)
    
  • 0

    这是使用元组而不是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))
    

    Output

    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
    
  • 2

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

    您可以将字典构造为:

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

    这为您提供了相关字符串和函数的字典 . 您可以选择随机运算符名称(这将给出字符串值, not 运算符本身 .

    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)

相关问题