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