数学符号来自变量

时间:2014-10-15 18:12:01

标签: python variables math

我在学校遇到了挑战,但是我的代码很少。

这就是我所拥有的;我缺少的是如何完成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

变量num1num2symbol是随机生成的,num1num2都是整数,symbol是{ {1}},'+''-''*'我想知道如何使用这些来获得方程的答案。

例如,'/'num150symbol'-'num2。我如何使用变量来获得答案25

2 个答案:

答案 0 :(得分:2)

干净的方法是创建从符号到函数的映射。

唯一的问题是,+运算符背后的功能是什么?

答案在operator模块中:a + boperator.add(a, b),依此类推。所以:

import operator

symbols = {
    '+': operator.add,
    '-': operator.sub,
    '*': operator.mul,
    '/': operator.floordiv
}

我假设您希望100 / 333,而不是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