我正在为一个项目问题编写一个简单的Python程序,它涉及在操作上生成一个搜索空间,例如:
8 = (4 * (1 + 3)) / 2
14 = 4 * (3 + 1 / 2)
19 = 4 * (2 + 3) − 1
36 = 3 * 4 * (2 + 1)
我将可能的操作存储在数组中:
op = ['+', '-', '*', '/']
我想知道在Python中是否有任何方法可以将字符强制转换为操作,所以我可以简单地执行以下操作:
for operation in op:
num1 foo(operation) num2
答案 0 :(得分:8)
您可以使用operator
模块来获取您正在寻找的功能。 operator
模块具有“一组与Python的内部运算符相对应的高效函数”:
>>> import operator as op
>>> ops = {"+": op.add, "-": op.sub, "/": op.div, "*": op.mul}
>>> num1, num2 = 3, 6
>>> for name, fn in ops.iteritems():
... print "{} {} {} = {}".format(num1, name, num2, fn(num1, num2))
...
3 + 6 = 9
3 * 6 = 18
3 - 6 = -3
3 / 6 = 0
答案 1 :(得分:3)
您如何看待:
In [1]: add = lambda x,y: x+y
In [2]: sub = lambda x,y: x-y
In [3]: mult = lambda x,y: x*y
In [4]: divs = lambda x,y: x/y
In [5]: ops = [add,sub,mult,divs]
In [6]: for op in ops:
...: print op(1,2)
...:
3
-1
2
0
更新:在发布我的回答后,我注意到@mdml的答案 - 我认为它比我的TBH更优雅:)
答案 2 :(得分:1)
eval可能有所帮助:
op = ['+', '-', '*', '/']
num1, num2 = 3, 6
for operation in op:
print eval("{} {} {}".format(num1, operation, num2))
给出:
9
-3
18
0
或者可以使用op表:
def add(x,y) : return x + y
def sub(x,y) : return x - y
def mul(x,y) : return x * y
def div(x,y) : return x / y
op = {'+' : add, '-': sub, '*' : mul, '/' : div }
num1, num2 = 3, 6
for operation in op.keys():
print op[operation](num1, num2)
答案 3 :(得分:-2)
不,你不能那样做。
您必须创建能够执行所需操作的函数。