Python将角色转换为操作

时间:2013-11-21 19:20:12

标签: python

我正在为一个项目问题编写一个简单的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

4 个答案:

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

不,你不能那样做。

您必须创建能够执行所需操作的函数。