2016-09-17 66 views
-1

我試圖製作一個計算器,但有點不同。 我在想,如果得到輸入像操作:如何將輸入作爲操作

first_number = input('Type first number: ') 
first_operation = input('Type your operation (+, -, *, /): ') 
second_number = input('Type second number: ') 
first_answer = input('Do you wanna stop here y/n: ') 
if first_answer = "y": 
    print(int(first_number), str(first_operation), int(second_number)) 

目前,該方案需要做出與用戶的輸入有問題。例如,如果用戶輸入第一個號碼爲3,第一個操作爲+,第二個號碼爲2。我只能寫出像3 + 2這樣的輸入,但我想在打印答案後解決。

回答

0

抓住從operator模塊的操作,並創建可用的運營商的字典:

>>> from operator import add, sub, mul, truediv 
>>> ops = {'+': add, '-': sub, '*': mul, '/': truediv} 

這樣做後,你可以在ops使用first_operationkey,得到了相應的功能操作和供應first_numbersecond_number作爲參數:

>>> first_number = int(input('Type first number: ')) 
>>> second_number = int(input('Type second number: ')) 
>>> first_operation = input('Type your operation (+, -, *, /): ') 

比方說,我們進入510+,則:

>>> print(ops[first_operation](first_number, second_number)) 
15 

注意,因爲他們的行爲不同,當str類型的號碼包裹在int它們提供給運營商面前。

舉一個簡單的選擇,你可以使用literal_evalast模塊,它提供一個表達式作爲輸入:

>>> from ast import literal_eval 
>>> first_number = input('Type first number: ') 
>>> second_number = input('Type second number: ') 
>>> first_operation = input('Type your operation (+, -, *, /): ') 

在這裏,您不必進行任何更改,int,你剛剛加入所有的參數和創建一個整體表達式的字符串,並將其送到literal_eval,以便它做到這一點。

>>> literal_eval(" ".join([first_number, first_operation, second_number])) 

在本質上您的通話將看起來像:

>>> literal_eval('5 + 10') 

爲15的結果,再次。