繁体   English   中英

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

[英]How to store and use mathematical operators as python variable

我是python的新手,并且正在尝试编写类似下面的内容(代码A),因此它与代码B完全一样。我想利用数学运算符的用户输入作为do_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))

您可以将操作员模块用于公共运算符,并创建查找字典以将符号映射到函数。 如果您希望运算符不在该模块中,您只需定义自定义函数并添加以相同的方式查找它们:

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))

您可能也有兴趣了解内置函数eval 这会将ifelse循环减少为您的特定示例的单个语句

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")
num1 = input("Enter a number: ")
num2 = input("Enter another number: ")
do_what = input("Enter calculation symbols for calculation you want to perform: ")
if do_what=='+':
    result = float(num1) + float(num2)
elif do_what=='-':
    result = float(num1) - float(num2)
elif do_what=='*':
    result = float(num1) * float(num2)
elif do_what=='/':
    result = float(num1) / float(num2)
print("result is: " + str(result))

如果您不关心安全性,可以使用eval来实现此目的

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

问题是,eval会逐字地评估你编写为python代码的所有内容,所以不要这样做,如果你的意思是让其他人使用它

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM