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():

第一个是设置一个可以从文件中的任何函数访问的全局变量。第二个是创建一个特定的功能。简而言之,它们不能像这样在同一个作用域中具有相同的名称。所以在第 26 行你调用n1了 ,它实际上是一个变量而不是一个函数,并且 Python 解释器出错了,因为你不能像调用方法那样“调用”一个 int 。

一个快速的解决方法是重命名你的变量n1,并且n2不是你的方法名称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则会发生 an,然后我们打印出“这不是数字”,然后返回到您的start函数。(或者,您可能希望将它放在一个 while 循环中,因此它会一直询问直到用户输入一个数字。这个问题可能会有所帮助。)如果它是一个数字,则return发生该语句。这会将该函数的结果返回到您调用它的位置。所以回到你的start()功能,你会做这样的事情:

value1 = n1()

这会将结果分配给您可以使用n1的新变量。value1

于 2013-01-26T04:44:36.523 回答