2015-04-21 48 views
1

我必须在十进制数之间执行特定的算术运算。操作可以是'加','减'或'相乘',并且所需的操作将与数字一起传递给我们的函数。 我想这样做的方式是,我想存储操作'+',' - '和'*'的ASCII值,然后以某种方式使用它执行这两个数字之间的操作。Python:使用算术运算符的ASCII值执行操作

def (a, b, op): 
    dict{'add':ord('+'), 'subtract':ord('-'), 'multiply':ord('*')} 
    return a dict[op] b # this statement does not work 

有没有办法在Python中实现类似的东西?

我知道一个替代方案是使用:

from operator import add,sub,mul 

,然后在哈希采用进口值代替,但对于这个问题,我想找出如果能够做到这一点,我问在原来的问题。谢谢 !

回答

1

是在Python的eval()函数,它接受字符串作为输入和输出返回,所以你稍微需要改变做法,eval()通常用作:

print eval("2 + 3") 
>>> 5 

因此,新的代码看起来是像:

def evaluate(a, b, op): 
    dict = {'add':'+', 'subtract':'-', 'multiply':'*'} 
    return eval(str(a)+ dict[op] +str(b)) 

print evaluate(2,3,"add") 
>>> 5 
+1

请务必阅读[是使用eval在Python不良实践?](http://stackoverflow.com/q/1832940/464709),但。 –

+0

是的,我知道,但这是问题的要求,更好的方法是使用开关盒或其他一些简洁的方法,但我不想改变问题的意图,因此只需进行微小的更改即可使其工作,感谢您的见解,赞赏:) – ZdaR

1

不,这

a dict[op] b 

不是有效的Python。

使用operator中的功能。