3 回答
TA贡献1816条经验 获得超4个赞
在一个层面上,你犯了一个错误,因为你定义data
为一个函数,重新定义data
为函数返回的内容,并最终试图data
用作你最初定义的函数(Python 抱怨你试图将元组用作函数:TypeError: 'tuple' object is not callable
)。为函数和玩家信息使用不同的名称就足以解决您的问题。
在另一个层面上,你命名你的函数是错误的。函数代表动作,因此您应该尝试为它们使用动作名称。 dataCheck
is OK, (that, or check_data
if you want to pressure the verb), data
is not good, get_data
could be OK but get_player_data
is even better, with check_player_data
as well.
作为第一个脚注,而不是name=data[0];
etc 更惯用的是将整个元组/列表解包为a, b, c = data
.
第二个,你dataCheck
没有产生结果......data
需要编辑你得到新的values
但data
不会被你的功能修改。
第三次和最后一次,如果你想编辑data
的checkData
,不这样做
elif yn == 'n': data = get_data()
因为这将创建一个不会在调用者名称空间级别产生回响的本地分配。
TA贡献1793条经验 获得超6个赞
你有一个命名空间冲突。一旦你说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(),这是一个方便的快捷方式
TA贡献1846条经验 获得超7个赞
总是使用一些唯一的变量名或注意函数/变量名。在您的情况下,由于名称相同,它将数据视为元组,而不是您要引用的元组。请比较与您的代码和下面的差异。
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);
添加回答
举报