我在学校遇到了挑战,但是我的代码很少。
这就是我所拥有的;我缺少的是如何完成answer =
行:
while (questions <= 9):
randoms()
print("What is: ", num1, symbol, num2,"?:")
uanswer = int(input())
answer =
if uanswer == answer:
correct = correct + 1
else:
incorrect = incorrect + 1
questions = questions + 1
变量num1
,num2
和symbol
是随机生成的,num1
和num2
都是整数,symbol
是{ {1}},'+'
,'-'
或'*'
我想知道如何使用这些来获得方程的答案。
例如,'/'
为num1
,50
为symbol
,'-'
为num2
。我如何使用变量来获得答案25
?
答案 0 :(得分:2)
干净的方法是创建从符号到函数的映射。
唯一的问题是,+
运算符背后的功能是什么?
答案在operator
模块中:a + b
是operator.add(a, b)
,依此类推。所以:
import operator
symbols = {
'+': operator.add,
'-': operator.sub,
'*': operator.mul,
'/': operator.floordiv
}
我假设您希望100 / 3
为33
,而不是33.333333333333336
。如果我错了,请使用truediv
代替上面的floordiv
。 (请参阅教程中的Numbers以了解差异的介绍,并提供更多详细信息的链接。)
无论如何,现在,你可以这样做:
answer = symbols[symbol](num1, num2)
即使您没有operator
,也可以为每个运营商构建一个函数:
symbols = {
'+': (lambda a, b: a + b),
'-': (lambda a, b: a - b),
'*': (lambda a, b: a * b),
'/': (lambda a, b: a // b)
}
如果您想将语言扩展为Python中没有匹配运算符的符号,这可能会派上用场。
如果您的数学语言是Python表达式语言的严格子集(如果您想要整数,可能不会注意到符号'/'
映射到Python运算符//
),并且您'确保你永远不会以不是这样的方式扩展它(例如,使用^
进行取幂),并且你确定你永远不会使用你所做的任何数字或符号。生成自己,只需构建一个Python表达式并eval
它就可以更简单:
expr = '{} {} {}'.format(num1, symbol, num2)
answer = eval(expr)
但是,使用eval
时应始终小心;如果干净利落的事情很简单,你可以写作,以后阅读和理解,那几乎总是一个更好的答案。
答案 1 :(得分:0)
我认为最好的方法是创建条件并检查符号..
if symbol=='-':
res = num1 - num2
elif symbol=='+':
res = num1 + num2