我在运行代码时遇到这种错误,但是我不明白这是什么意思,我尝试用谷歌搜索类似的情况,但是我什么也没找到。这是我按无响应时得到的错误
Traceback (most recent call last):
File "/home/main.py", line 27, in <module>
dataCheck(data);
File "/home/main.py", line 24, in dataCheck
values=data();
TypeError: 'tuple' object is not callable
这是我写的代码:
print("Welcome to the game!");
def data():
name=input("Give me your name: ");
lname=input("Give me your last name: ");
age=int(input("Give me your age: "));
return (name,lname,age);
def dataCheck(data):
name=data[0];
lname=data[1];
age=str(data[2]);
print("Your name: "+name);
print("Your Last name: "+lname);
print("Your age: "+age);
yn=input("The information are true Y/N :");
if yn.lower()=="y":
print("Welcome "+name);
elif yn.lower()=="n":
values=data();
dataCheck(values);
data=data();
dataCheck(data);
答案 0 :(得分:1)
您遇到名称空间冲突。一旦说了data = data()
,函数data()
就消失了,因此当您用values = data()
调用它时,您正试图调用它以前返回的值。
尝试一下。
print("Welcome to the game!")
def get_data():
name = input("Give me your name: ")
lname = input("Give me your last name: ")
age = int(input("Give me your age: "))
return (name, lname, age)
def data_check(data):
name, lname, age = data
print("Your name: " + name)
print("Your Last name: " + lname)
print("Your age: " + str(age))
yn = input("The information are true Y/N :")
if yn.lower() == "y":
print("Welcome " + name)
elif yn.lower() == "n":
data_check(get_data())
data_check(get_data())
请注意,我也
snake_cased
data_check
函数(这是约定)data_check()
中的单独分配,这是方便的快捷方式答案 1 :(得分:1)
在一个级别上,您犯了一个错误,因为您将data
定义为一个函数,将data
重新定义为该函数返回的内容,并最终尝试使用data
作为您定义的函数起初(Python抱怨您试图使用元组作为函数:TypeError: 'tuple' object is not callable
)。为该功能和播放器信息使用不同的名称足以解决您的问题。
在另一个级别,您命名您的函数有误。函数表示动作,因此您应尝试为其使用动作名称。 dataCheck
是可以的,(或者,如果您想强调动词,则是check_data
),data
不好,get_data
可以,但是get_player_data
是可以的更好,再加上check_player_data
。
作为第一个脚注,像name=data[0];
那样,将整个元组/列表解压缩比使用a, b, c = data
等更为习惯。
第二,您的dataCheck
没有产生结果……如果data
需要编辑,您会得到新的values
,但是data
不会由您的功能修改。
最后,如果要在data
中编辑checkData
,请不要
elif yn == 'n':
data = get_data()
因为这将创建一个在调用者的名称空间级别上没有回响的本地分配。
答案 2 :(得分:1)
总是使用一些唯一的变量名或注意函数/变量名。在您的情况下,由于名称相同,它会将数据视为元组,而不是您尝试引用的元组。 请比较您与以下代码的区别。
print("Welcome to the game!");
def Input_data():
name=input("Give me your name: ");
lname=input("Give me your last name: ");
age=int(input("Give me your age: "));
return (name,lname,age);
def dataCheck(data):
name=data[0];
lname=data[1];
age=str(data[2]);
print("Your name: "+name);
print("Your Last name: "+lname);
print("Your age: "+age);
yn=input("The information are true Y/N :");
if yn.lower()=="y":
print("Welcome "+name);
elif yn.lower()=="n":
values=Input_data();
dataCheck(values);
data=Input_data();
dataCheck(data);
答案 3 :(得分:0)
执行以下操作:
def data_fn():
name=input("Give me your name: ");
lname=input("Give me your last name: ");
age=int(input("Give me your age: "));
return (name,lname,age);
def dataCheck(data):
name=data[0];
lname=data[1];
age=str(data[2]);
print("Your name: "+name);
print("Your Last name: "+lname);
print("Your age: "+age);
yn=input("The information are true Y/N :");
if yn.lower()=="y":
print("Welcome "+name);
elif yn.lower()=="n":
values=data_fn(); # instead of calling the tuple as function call the function itself
dataCheck(values);
data=data_fn();
dataCheck(data);
您的代码存在问题,因为您正在调用tuple
作为函数,因此出现错误: 'tuple' object is not callable
。
答案 4 :(得分:-1)
您应该使用raw_input
,raw_input
将返回<type 'str'>
,对于input
,如果要输入字符串,则应这样使用:>
```
a =输入('a:') 答:“您的输入字符串” ```