0

私は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には比較的慣れていませんが、プログラミングには慣れていません。また、これがコード化されている方法に何か問題がありますか (つまり、ずさんなコーディング) 教えてください。

4

2 に答える 2

4

あなたの入力はおそらく"6"数値ではなく文字列(例)6です。

一般的に、あなたのコードは不必要に長く、Don't Repeat Yourselfの原則に違反していると思います。まず、1 つの場所で 2 つの番号を要求し、関連する関数を呼び出して関連する操作を実行できます。

より簡潔な設計では、Python 演算子を使用します。

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

関数の型を尋ねてから、関連する関数を呼び出すことができます (Lev の回答を参照)。

興味深いケースは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
于 2012-04-04T10:48:02.747 に答える
0

funcAdam が指摘しているように、問題は に変換しないことですintelifあなたはコードの構成についてもアドバイスを求めているので、積み重ねられた句を取り除くために次のことを提案できます。

functions = [plus, minus, divide, multiply, power, square]
try:
    func = int(input())
    functions[func-1]()
except:
    print("Please choose an existing function number.")
    exit()
于 2012-04-04T10:53:59.293 に答える