'int'对象不可调用:输入错误

时间:2013-01-26 04:40:43

标签: python-3.3

好的,所以今天我做了一个基本的计算器,(今天是我学习编程的第一天),我收到了以下代码的错误:

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

有人可以向我解释这里有什么问题吗?

1 个答案:

答案 0 :(得分:1)

问题是你将n1定义为函数和变量。它不可能两者兼而有之。我建议您更改def n1():功能的名称。

要扩展一点,在第2行,你有这个:

global n1

但是在第5行,你有这个:

def n1():

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

快速解决方法是将变量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循环中,因此它会一直询问,直到用户输入一个数字。This question may help.)如果是数字,则会发生return语句。这会将该函数的结果返回到您调用它的位置。回到你的start()函数中,你会做这样的事情:

value1 = n1()

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