TypeError:尝试获取用户输入时无法调用“ tuple”对象

时间:2018-12-26 07:44:23

标签: python

我在运行代码时遇到这种错误,但是我不明白这是什么意思,我尝试用谷歌搜索类似的情况,但是我什么也没找到。这是我按无响应时得到的错误

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

5 个答案:

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

请注意,我也

  • 删除了分号(Python中不需要分号)
  • 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_inputraw_input将返回<type 'str'>,对于input,如果要输入字符串,则应这样使用:

```

  

a =输入('a:')   答:“您的输入字符串”   ```