2017-04-20 84 views
-2

這是我的計算器。我做到了,因爲我的朋友向我挑戰,讓它成爲12行。和我DID!現在我試圖縮短它,但理論上它不可能更短: 程序必須: 1:解釋所有內容並要求輸入(第一行) 2:接受輸入(第二行) 3:打印(答案) 4至1​​2:由邏輯和操作組成。縮短我的計算器代碼(python3)

我請大家看看我的代碼,並教我一些新的: 如何使它少於12行!

在此先感謝! (PS。我沒有做這個學校,這僅僅是爲了好玩,我學到了我自己的時間)

以下是在Python 3:

print("\n enter 'first number' \n then the 'second number' \n then enter the 'type of operation': + - */ ") 
a,b,c = [(input("Enter : ")) for i in range(0,3) ] 
def op(a,b,c): 
    if c == '+': 
     return(float(a)+float(b)) 
    elif c == '*': 
     return(float(a)*float(b)) 
    elif c == '/': 
     return(float(a)/float(b)) 
    elif c == '-': 
     return(float(a)-float(b)) 
print('your answer is: ',op(a,b,c)) 
+0

如果僅僅是行數:1和2可以合併,你的'if' /'elif'語句可以從兩行減少到一行。但是我會使用'operator'模塊中的運算符字典來代替:'ops = {'+':operator .__ add__,...}' –

回答

1

首先,你可以使用astliteral_eval安全地直接評估字符串文字。

import ast 
print("\n enter 'first number' \n then the 'second number' \n then enter the 'type of operation': + - */ ") 
a,b,c = [(input("Enter : ")) for i in range(0,3) ] 
def op(a,b,c): 
    return ast.literal_eval("%f%s%f"%(a, c, b)) 
print('your answer is: ',op(a,b,c)) 

或者,如果你想算線,cheaty,但凌亂,一個行的解決辦法是:

print("\n enter 'first number' \n then the 'second number' \n then enter the 'type of operation': + - */ ");print('your answer is: ',__import__("ast").literal_eval("{0}{2}{1}".format(*[float(input("Enter : ")) if i != 2 else input("Enter : ") for i in range(0,3)]))) 
+0

方法定義不是必需的 –

+0

@abccd wOw。謝謝 – KOOLz