![](/img/trans.png)
[英]Python: How can I assign string representations of operators to mathematical operators using a dictionary?
[英]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 。 这会将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")
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.