2015-04-21 97 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中的功能。