如何存储和使用数学运算符作为python变量

如何存储和使用数学运算符作为python变量,python,Python,我是python新手,尝试编写下面这样的代码(代码A),因此它与代码B非常相似。我想使用数学运算符的用户输入作为do\u what变量。我们如何用python编写这段代码(A),使其像代码B一样工作 代码A num1 = input("Enter a number: ") num2 = input("Enter another number: ") do_what = input("Enter a calculation symbol for calculation you want to pe

我是python新手,尝试编写下面这样的代码(代码A),因此它与代码B非常相似。我想使用数学运算符的用户输入作为
do\u what
变量。我们如何用python编写这段代码(A),使其像代码B一样工作

代码A

num1 = input("Enter a number: ")
num2 = input("Enter another number: ")
do_what = input("Enter a calculation symbol for calculation you want to perform: ")
result = float(num1) do_what float(num2)
print("result is: " + str(result))
代码B

num1 = input("Enter a number: ")
num2 = input("Enter another number: ")
result = int(num1) + int(num2)
print("result is: " + str(result))
您可以使用for common运算符并创建查找字典以将符号映射到函数。如果您不希望在该模块中使用运算符,您可以简单地定义自定义函数并添加它们,然后以相同的方式查找它们:

import operator

operatorlookup = {
    '+': operator.add,
    '-': operator.sub,
    '*': operator.mul,
    '/': operator.truediv
}

num1 = input("Enter a number: ")
num2 = input("Enter another number: ")
do_what = input("Enter calculation symbols for calculation you want to perform: ")

op = operatorlookup.get(do_what)

if op is not None:
    result = op(float(num1), float(num2))
else:
    result = "Unknown operator"
print("result is: " + str(result))

您可能还对了解内置函数感兴趣。对于您的这个特定示例,这将
if
else
循环减少为单个语句

num1 = input("Enter a number: ")
num2 = input("Enter another number: ")
do_what = input("Enter calculation symbols for calculation you want to perform: ")

result = eval(num1 + do_what + num2)
print("result is: %s" %result)

# Enter a number: 3
# Enter another number: 18
# Enter calculation symbols for calculation you want to perform: *
# result is: 54
编辑

为了使
eval
在这种特殊情况下稍微安全,您可以使用类似的方法

if do_what in ['+', '-', '*', '**', '/']:
    result = eval(num1 + do_what + num2)
    print("result is: %s" %result)
else:
    print ("Enter an arithmetic operator")

如果您不关心安全性,您可以使用eval来实现这一点

result = eval(str(num1) + do_what + str(num2))

问题是eval会逐字计算您作为python代码编写的所有内容,因此如果您想让其他人使用它,请不要这样做

它必须看起来像中缀运算符吗?不确定中缀的含义,但它可能是变量-+,-,X etcThanks!这是可行的,但是如果用
dou\u what
替换符号就好了。我已经看到过很多次,不推荐使用
eval
,但它似乎可以完成任务。有什么缺点需要担心吗?@hqkhan:看看答案。根据一条评论,似乎只要您的
输入不直接在
eval()
中,您就是fine@hqkhan:还有,它的价值reading@hqkhan:检查我的编辑。这样会稍微安全一点
result = eval(str(num1) + do_what + str(num2))