2017-04-20 16 views
-2

これは私の電卓です。私の友人は私に12行でそれを挑戦したので私は作った。と私は死んだ! プログラムは: 1:すべてを説明して入力を要求してください(最初の行) 2:入力(2行目)を受け取ります 3: print(解答) 4〜12:はロジックと操作で構成されています。私の電卓コードを短くします(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'文はすべて2行から1行に減らすことができます。しかし、私は '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が、乱雑、1行のソリューションは次のようになります。

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