类型错误:尝试获取用户输入时,“元组”对象不可调用

我在运行我的代码时遇到这种错误,但我不明白这是什么意思


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


一只名叫tom的猫
浏览 384回答 3
3回答

繁华开满天机

在一个层面上,你犯了一个错误,因为你定义data为一个函数,重新定义data为函数返回的内容,并最终试图data用作你最初定义的函数(Python 抱怨你试图将元组用作函数:TypeError: 'tuple' object is not callable)。为函数和玩家信息使用不同的名称就足以解决您的问题。在另一个层面上,你命名你的函数是错误的。函数代表动作,因此您应该尝试为它们使用动作名称。&nbsp;dataCheckis OK, (that, or&nbsp;check_dataif you want to pressure the verb),&nbsp;datais not good,&nbsp;get_datacould be OK but&nbsp;get_player_datais even better, with&nbsp;check_player_dataas well.作为第一个脚注,而不是name=data[0];etc 更惯用的是将整个元组/列表解包为a, b, c = data.第二个,你dataCheck没有产生结果......data需要编辑你得到新的values但data不会被你的功能修改。第三次和最后一次,如果你想编辑data的checkData,不这样做&nbsp;&nbsp;&nbsp;&nbsp;elif&nbsp;yn&nbsp;==&nbsp;'n': &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data&nbsp;=&nbsp;get_data()因为这将创建一个不会在调用者名称空间级别产生回响的本地分配。

摇曳的蔷薇

你有一个命名空间冲突。一旦你说data = data(),函数data()就消失了,所以当你用 调用它时values = data(),你试图调用它之前返回的值。尝试这个。print("Welcome to the game!")def get_data():&nbsp; &nbsp; name = input("Give me your name: ")&nbsp; &nbsp; lname = input("Give me your last name: ")&nbsp; &nbsp; age = int(input("Give me your age: "))&nbsp; &nbsp; return (name, lname, age)def data_check(data):&nbsp; &nbsp; name, lname, age = data&nbsp; &nbsp; print("Your name: " + name)&nbsp; &nbsp; print("Your Last name: " + lname)&nbsp; &nbsp; print("Your age: " + str(age))&nbsp; &nbsp; yn = input("The information are true Y/N :")&nbsp; &nbsp; if yn.lower() == "y":&nbsp; &nbsp; &nbsp; &nbsp; print("Welcome " + name)&nbsp; &nbsp; elif yn.lower() == "n":&nbsp; &nbsp; &nbsp; &nbsp; data_check(get_data())data_check(get_data())注意我也删除了分号(Python 中不需要分号)snake_cased该data_check功能(这是惯例)在 中使用元组解包而不是单独赋值data_check(),这是一个方便的快捷方式

喵喵时光机

总是使用一些唯一的变量名或注意函数/变量名。在您的情况下,由于名称相同,它将数据视为元组,而不是您要引用的元组。请比较与您的代码和下面的差异。print("Welcome to the game!");def Input_data():&nbsp; &nbsp; name=input("Give me your name: ");&nbsp; &nbsp; lname=input("Give me your last name: ");&nbsp; &nbsp; age=int(input("Give me your age: "));&nbsp; &nbsp; return (name,lname,age);def dataCheck(data):&nbsp; &nbsp; name=data[0];&nbsp; &nbsp; lname=data[1];&nbsp; &nbsp; age=str(data[2]);&nbsp; &nbsp; print("Your name: "+name);&nbsp; &nbsp; print("Your Last name: "+lname);&nbsp; &nbsp; print("Your age: "+age);&nbsp; &nbsp; yn=input("The information are true Y/N :");&nbsp; &nbsp; if yn.lower()=="y":&nbsp; &nbsp; &nbsp; &nbsp; print("Welcome "+name);&nbsp; &nbsp; elif yn.lower()=="n":&nbsp; &nbsp; &nbsp; &nbsp; values=Input_data();&nbsp; &nbsp; &nbsp; &nbsp; dataCheck(values);data=Input_data();dataCheck(data);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python