好的,所以今天我做了一个基本的计算器,(今天是我学习编程的第一天),我收到了以下代码的错误:
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()
有人可以向我解释这里有什么问题吗?
答案 0 :(得分:1)
问题是你将n1
定义为函数和变量。它不可能两者兼而有之。我建议您更改def n1():
功能的名称。
要扩展一点,在第2行,你有这个:
global n1
但是在第5行,你有这个:
def n1():
第一个是设置一个可以从文件中的任何函数访问的全局变量。第二个是创建一个特定的功能。简单地说,它们不能在这样的相同范围内具有相同的名称。所以在第26行,你调用n1
,它实际上是一个变量,而不是一个函数,并且Python解释器出错,因为你不能像调用方法那样“调用”一个int。
快速解决方法是将变量n1
和n2
重命名为方法名称n1
和n2
以外的其他变量。但是,当您不断学习编程时,您将学习如何将变量传递给方法以及在方法完成时返回它们。这意味着你甚至不必使用全局变量(这通常被认为是一件坏事)。
因此,您可以删除该行,并将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
。