2012-04-04 13 views
0

を開始しません、ここでのコードは次のとおりです。Pythonの関数は、私はPythonの電卓を書いて​​

#Python Calculator 

import sys; 
import cmath; 

def plus(): 
    num1 = float(input("Input the first number: ")); 
    num2 = float(input("Input the second number: ")); 
    ans = (num1 + num2); 
    print(ans); 
    exit(); 
    return; 

def minus(): 
    num1 = float(input("Input the first number: ")); 
    num2 = float(input("Input the second number: ")); 
    ans = (num1 - num2); 
    print(ans); 
    exit(); 
    return; 

def divide(): 
    num1 = float(input("Input the first number: ")); 
    num2 = float(input("Input the second number: ")); 
    ans = (num1/num2); 
    print(ans); 
    exit(); 
    return; 

def multiply(): 
    num1 = float(input("Input the first number: ")); 
    num2 = float(input("Input the second number: ")); 
    ans = (num1 * num2); 
    print(ans); 
    exit(); 
    return; 

def power(): 
    num1 = float(input("Input the number: ")); 
    num2 = float(input("Input the power: ")); 
    ans = cmath.pow(num1, num2); 
    print(ans); 
    exit(); 
    return; 

def square(): 
    num1 = float(input("Input the number: ")); 
    ans = cmath.sqrt(num1); 
    print(ans); 
    exit(); 
    return; 

def inputs(): 
    print("Select which function you would like to use:"); 
    print("1 for Plus"); 
    print("2 for Minus"); 
    print("3 for Divide"); 
    print("4 for Multiply"); 
    print("5 for Power"); 
    print("6 for Square Root"); 
    func = input(); 

    if func == 1: 
     plus(); 
    elif func == 2: 
     minus(); 
    elif func == 3: 
     divide(); 
    elif func == 4: 
     multiply(); 
    elif func == 5: 
     power(); 
    elif func == 6: 
     square(); 
    return; 

def exit(): 
    exit = str(input("Run again? y/n: ")); 
    if exit == "Y" or exit == "y": 
     inputs(); 
     print (""); 
    elif exit == "N" or exit == "n": 
     sys.exit(); 
    else: 
     exit(); 
    return; 

print ("Python Calculator"); 
print(""); 
inputs(); 

今の問題は、あなたが実行したい機能を、入力された後、プログラムはちょうど閉じ、です。私は比較的新しいPythonですが、プログラミングには向いていません。また、これがコード化されている方法に間違っています(つまり、コードが不適切です)。教えてください。

+6

あなたは、各文字列の最後にセミコロンを配置する必要がないことを知って、そうでしょう? –

+0

また、すべての関数の最後に明示的に 'return'する必要はありません。関数からの返り値は、終わりに達するとどうなります。また、exit()から 'inputs()'を呼び出すのはしばらくの間はうまくいくが、それは面倒であり、関数がどのように機能しているのかという誤解を示唆している。 –

+0

とにかく、実際に何が問題になっているのかを知るには、既存のコマンドウィンドウ(プログラムが終了しても終了しない)から実行する必要があります。 –

答えて

4

あなたの入力はおそらく数字6の代わりに文字列(例:"6")です。

一般的に、私はあなたのコードが長く必要ではなく、Don't Repeat Yourselfの原則を破ると思います。まず最初に、2つの数字を1つの場所で尋ねることができます。その後、関連する関数を呼び出して関連する操作を実行することができます。

より簡潔なデザインは、Pythonの演算子を使用します。

funcs=[operator.add, operator.sub, operator.div, 
     operator.mul, operator.pow, your_square_function] 

あなたは、関連する機能(レフの答えを参照)を呼び出した後、関数型を求めることができます。

興味深いケースはsqrです.2つではなく、1つの引数をとります。これは、各関数が取る引数の数を指定することで解決することができます:

funcs=[(operator.add, 1), (operator.sub, 2), (operator.div, 2), 
     (operator.mul, 2), (operator.pow, 2), (your_square_function, 1)] 

ソリューションは現在、単純です - 、機能の数を求める引数の正しい数を求める、とfuncs[input_number][0]を呼び出します。関数名も保存されているように

このアイデアは、精緻化することができます。

funcs=[("Plus", operator.add, 1), ("Minus", operator.sub, 2), 
     ("Divide", operator.div, 2), ("Multiply", operator.mul, 2), 
     ("Power", operator.pow, 2), ("Square root", your_square_function, 1)] 

は今、あなたのプログラムは、(擬似コード)のようになります:アダム・ノートとして

for f in funcs: 
     print id, function_name 
ask for id 
ask for relevant number of arguments 
run funcs[id] with relevant number of arguments 
+1

ありがとうございます。pythonが "func"変数を文字列として入力していたので、プログラムが修正されました。これで、提案したようにより良い設計をする必要があります。再びありがとう! – jambolina

+0

あなたは適切な言語を選択しました。あなたのコードがどの程度短くて読みやすいかに驚くでしょう。 –

0

を、問題がありますfuncintに変換していないことを確認してください。 あなたはまた、コードの組織に関するアドバイスを求めるので、私が積み重ねられelif句を取り除くために次のことを提案することができます:

functions = [plus, minus, divide, multiply, power, square] 
try: 
    func = int(input()) 
    functions[func-1]() 
except: 
    print("Please choose an existing function number.") 
    exit() 
+0

これは演算子に拡張することができます - 私の答えを参照してください。 –

+3

私はPythonの新しいコーナーに 'except all 'を使うよう助言することには慎重だと思います。 – MattH

+0

@MattH 'except(ValueError、IndexError)'と書いてもらえますか? –

関連する問題