0

さて、今日は基本的な電卓を作成しました (そして、今日はプログラミングを学ぶ最初の日です)。次のコードでこのエラーが発生します。

Traceback (most recent call last):
  File "C:\Users\Stone\Desktop\unfinished calculator.py", line 42, in <module>
    start()
  File "C:\Users\Stone\Desktop\unfinished calculator.py", line 26, in start
    n1()
TypeError: 'int' object is not callable

これをコードとして

x = 1
global n1
global n2
global opp1
def n1():
    global n1
    n1 = input("Number to perform operation on: ")
    n1 = int(n1)
def n2():
    global n2
    n2 = input("Number to perform operation with: ")
    n2 = int(n2)
def opp():
    global opp1
    opp1 = input("Available operations to perform with number:\n1)Addition\n2)Subtraction\n3)Multiplication\n4)Division\n5)Exit Calculator\nPlease enter number choice (1-5): ")
    opp1 = int(opp1) 
def add():
    print(n1 + n2)
def subtract():
    print (n1 - n2)
def multiply():
    print(n1 * n2)
def divide():
    print(n1 / n2)
def start():
    n1()
    opp()
    n2()
    if opp1 == 1:
        add()
    elif opp1 == 2:
        subtract()
    elif opp1 == 3:
        multiply()
    elif opp1 == 4:
        divide()
    elif opp1 == 5:
        x = 0
    else:
        print("Invalid Choice!")
while x == 1:
    start()

誰かがここで何が悪いのか説明してもらえますか?

4

1 に答える 1

1

問題はn1、関数と変数の両方として定義していることです。両方はあり得ません。関数の名前を変更することをお勧めしますdef n1():

もう少し拡張すると、2 行目は次のようになります。

global n1

しかし、5 行目では、次のようになります。

def n1():

1 つ目は、ファイル内の任意の関数からアクセスできるグローバル変数を設定することでした。2 つ目は、特定の関数を作成することです。簡単に言えば、このように同じスコープで同じ名前を持つことはできません。したがって、26 行目で を呼び出しますがn1、これは実際には関数ではなく変数であり、メソッドを呼び出すことができるように int を「呼び出す」ことができないため、Python インタープリターはエラーを出します。

簡単な修正は、変数の名前を変更しn1n2メソッド名n1n2. ただし、プログラミングを学習し続けると、メソッドに変数を渡す方法と、メソッドが終了したときにそれらを返す方法を学習します。これは、グローバル変数を使用する必要さえないことを意味します (これはしばしば悪いことと見なされます)。

したがって、宣言するのではなく、global n1その行を削除して、n1関数を次のように定義できます。

def n1():
    number = input('Number to perform operation on: ')
    try:
        return int(number)
    except ValueError:
        print("That's not a number.")

そこで何が起こっているかを分析するには:

ステートメントはtry、コードのブロックを実行しようとします。この場合、ユーザーが入力したものを整数に変換しようとします。数値でない場合は、exceptionが発生し、「それは数値ではありません」と出力して、関数に戻りますstart。(または、while ループに入れると、ユーザーが数値を入力するまで尋ね続けることができます。この質問が役立つ場合があります。) 数値の場合、returnステートメントが発生します。これにより、その関数の結果が、呼び出した場所に返されます。したがって、start()関数に戻ると、次のようになります。

value1 = n1()

n1これにより、結果が新しい変数に割り当てられ、value1それを使用できるようになります。

于 2013-01-26T04:44:36.523 に答える