我的问题是,如果我有一个名为op的变量,它可以包含加号,减号等,我该如何利用该变量进行计算?而不是有多个if语句我怎么能做这样的事情
if op in ['+','-', '*', '/']:
return x op y
else:
print("ERROR")
而不是例如
if op == "+":
return x + y
elif op == "-":
return x - y
....
....
我尝试过将op设为int但它不起作用,是否有解决方案,或者我必须检查op是否有任何可能的迹象?
编辑: 如何用大于,小于或等于的符号做同样的事情?
检查是否是这些中的任何一个`[“=”,“<”,“>”]
答案 0 :(得分:3)
您可以创建从符号到operator
函数的映射,该函数对应于op:
import operator
ops = {
'+': operator.add,
'-': operator.sub,
'*': operator.mul,
'/': operator.div,
}
然后:
def apply_op(op, val1, val2):
return ops[op](val1, val2)
答案 1 :(得分:1)
您应该查看operator
模块。它包含每个Python运算符的函数:
import operator
# Below is a mapping of op symbols to their corresponding functions
ops = {
'+' : operator.add,
'-' : operator.sub,
'*' : operator.mul,
'/' : operator.truediv,
'==' : operator.eq,
'>' : operator.gt,
'<' : operator.lt
}
def func(op, x, y):
try:
return ops[op](x, y)
except KeyError:
return 'ERROR'
以下是演示:
>>> func('+', 2, 1)
3
>>> func('-', 2, 1)
1
>>> func('*', 2, 1)
2
>>> func('/', 2, 1)
2.0
>>> func('==', 2, 1)
False
>>> func('>', 2, 1)
True
>>> func('<', 2, 1)
False
>>> func('&', 2, 1) # Just to demonstrate
'ERROR'
>>>
答案 2 :(得分:0)
您可以执行类似
的操作eval('%d %s %d' % (x, op, y))
编辑:取决于问题的微不足道, 你会
assert isinstance(x, int)
assert isinstance(y, int)