Python用户数据检查
我有一个程序,获取用户的输入,然后询问信息是否正确。但是,当用户输入完信息后,我发现以下代码出现错误:Python用户数据检查,python,Python,我有一个程序,获取用户的输入,然后询问信息是否正确。但是,当用户输入完信息后,我发现以下代码出现错误: #Welcome print("Welcome to the game!\n") def data(): #Age age = int(input("Enter your age: ")) #Gender gen = input("Enter your gender: ") #email mail = input("Enter your em
#Welcome
print("Welcome to the game!\n")
def data():
#Age
age = int(input("Enter your age: "))
#Gender
gen = input("Enter your gender: ")
#email
mail = input("Enter your email: ")
#username
name = input("Enter your name: ")
return (age, gen, mail, name)
def datacheck():
print("Your information:\n")
print("Age: ", age, "\n")
print("Gender: ", gen, "\n")
print("Email: ", mail, "\n")
print("Username: ", name, "\n")
yn = input("Is it correct? Yes or No: ")
if yn == "Yes":
print("Hello, ", name)
if yn == "No":
data()
#Array to variables
age = data[0]
gen = data[1]
mail = data[2]
name = data[3]
#datacheck
datacheck()
data = data()
#Array to Variable.
age = data[0]
gen = data[1]
mail = data[2]
name = data[3]
#datacheck
datacheck()
我得到的错误是:
回溯最近的调用上次:文件
/Users/joe/Documents/test123.py,第48行,在
datacheck文件/Users/joe/Documents/test123.py,第20行,在datacheck中
printAge:,age,\n UnboundLocalError:赋值前引用的局部变量“age”
如果我键入但重新输入信息无效,则不会出错:
#Welcome
print("Welcome to the game!\n")
def data():
#Age
age = int(input("Enter your age: "))
#Gender
gen = input("Enter your gender: ")
#email
mail = input("Enter your email: ")
#username
name = input("Enter your name: ")
return (age, gen, mail, name)
def datacheck():
print("Your information:\n")
print("Age: ", age, "\n")
print("Gender: ", gen, "\n")
print("Email: ", mail, "\n")
print("Username: ", name, "\n")
yn = input("Is it correct? Yes or No: ")
if yn == "Yes":
print("Hello, ", name)
if yn == "No":
data()
#datacheck
datacheck()
data = data()
#Array to Variable.
age = data[0]
gen = data[1]
mail = data[2]
name = data[3]
#datacheck
datacheck()
如何获得它,以便用户可以重新输入其信息数据函数?您的变量不是全局变量,您需要将它们传递给函数或声明为全局变量 此外,应使用原始输入,而不是此处所述的字符串输入:
适用于我。您的变量不是全局变量,您需要将它们传递给函数或声明为全局变量 此外,应使用原始输入,而不是此处所述的字符串输入: 适合我。年龄、性别、邮件、姓名在数据和数据检查中都是局部变量,这些变量的作用域就是它们所属的方法。必须将这些变量定义为全局变量,或者将变量/元组对象从一个方法传递到另一个方法 根据您的逻辑,您需要将元组对象传递到datacheck,将其修改为datachecktuple,我对其进行了如下测试:
hzhang@dell-work ~/PycharmProjects/Test $ cat test.py
#Welcome
print("Welcome to the game!\n")
def data():
#Age
age = int(input("Enter your age: "))
#Gender
gen = input("Enter your gender: ")
#email
mail = input("Enter your email: ")
#username
name = input("Enter your name: ")
return (age, gen, mail, name)
def datacheck(data):
age = data[0]
gen = data[1]
mail = data[2]
name = data[3]
print("Your information:\n")
print("Age: ", age, "\n")
print("Gender: ", gen, "\n")
print("Email: ", mail, "\n")
print("Username: ", name, "\n")
yn = input("Is it correct? Yes or No: ")
if yn == "Yes":
print("Hello, ", name)
if yn == "No":
values = data()
#datacheck
datacheck(values)
data = data()
#Array to Variable.
age = data[0]
gen = data[1]
mail = data[2]
name = data[3]
#datacheck
datacheck(data)hzhang@dell-work ~/PycharmProjects/Test $ python test.py
Welcome to the game!
Enter your age: 22
Enter your gender: "male"
Enter your email: "hi@email.com"
Enter your name: "haifzhan"
Your information:
('Age: ', 22, '\n')
('Gender: ', 'male', '\n')
('Email: ', 'hi@email.com', '\n')
('Username: ', 'haifzhan', '\n')
Is it correct? Yes or No: "Yes"
('Hello, ', 'haifzhan')
age、gen、mail、name在data和datacheck中都是局部变量,这些变量的作用域就是它们所属的方法。必须将这些变量定义为全局变量,或者将变量/元组对象从一个方法传递到另一个方法
根据您的逻辑,您需要将元组对象传递到datacheck,将其修改为datachecktuple,我对其进行了如下测试:
hzhang@dell-work ~/PycharmProjects/Test $ cat test.py
#Welcome
print("Welcome to the game!\n")
def data():
#Age
age = int(input("Enter your age: "))
#Gender
gen = input("Enter your gender: ")
#email
mail = input("Enter your email: ")
#username
name = input("Enter your name: ")
return (age, gen, mail, name)
def datacheck(data):
age = data[0]
gen = data[1]
mail = data[2]
name = data[3]
print("Your information:\n")
print("Age: ", age, "\n")
print("Gender: ", gen, "\n")
print("Email: ", mail, "\n")
print("Username: ", name, "\n")
yn = input("Is it correct? Yes or No: ")
if yn == "Yes":
print("Hello, ", name)
if yn == "No":
values = data()
#datacheck
datacheck(values)
data = data()
#Array to Variable.
age = data[0]
gen = data[1]
mail = data[2]
name = data[3]
#datacheck
datacheck(data)hzhang@dell-work ~/PycharmProjects/Test $ python test.py
Welcome to the game!
Enter your age: 22
Enter your gender: "male"
Enter your email: "hi@email.com"
Enter your name: "haifzhan"
Your information:
('Age: ', 22, '\n')
('Gender: ', 'male', '\n')
('Email: ', 'hi@email.com', '\n')
('Username: ', 'haifzhan', '\n')
Is it correct? Yes or No: "Yes"
('Hello, ', 'haifzhan')
在尝试使用变量之前,需要将变量从第一个函数传递到第二个函数
#Welcome
print("Welcome to the game!\n")
def data():
age = int(input("Enter your age: "))
gen = str(input("Enter your gender: "))
mail = str(input("Enter your email: "))
name = str(input("Enter your name: "))
return (age, gen, mail, name)
def datacheck():
age, gen, mail, name = data()
print("Your information:\n")
print("Age: %s\n"%(age))
print("Gender: %s\n"%(gen))
print("Email: %s\n"%(mail))
print("Username: %s\n"%(name))
yn = input("Is it correct? Yes or No: ")
if yn == "Yes":
print("Hello, ", name)
if yn == "No":
datacheck()
#datacheck
datacheck()
在尝试使用变量之前,需要将变量从第一个函数传递到第二个函数
#Welcome
print("Welcome to the game!\n")
def data():
age = int(input("Enter your age: "))
gen = str(input("Enter your gender: "))
mail = str(input("Enter your email: "))
name = str(input("Enter your name: "))
return (age, gen, mail, name)
def datacheck():
age, gen, mail, name = data()
print("Your information:\n")
print("Age: %s\n"%(age))
print("Gender: %s\n"%(gen))
print("Email: %s\n"%(mail))
print("Username: %s\n"%(name))
yn = input("Is it correct? Yes or No: ")
if yn == "Yes":
print("Hello, ", name)
if yn == "No":
datacheck()
#datacheck
datacheck()
你有问题
<> P>此外,我认为你可能想考虑存在。也就是说,如果我对您使用用户数据的假设是正确的。您不必将用户的属性保存在一组数组列表中,而可以将用户的属性保存在一种称为数组的东西中。我的意思是,如果你的用户最终拥有2000个属性,你是否想记住哪个属性编号代表他们的眼睛颜色,这样你就可以在列表中引用它?可能不会。哈哈
这种方法可能会使您的代码更易于使用/重用,并在将来更有条理:
class User():
"""A class representing a user.
defaults set.
"""
def __init__(self, data={'age': 1,
'gender': 'x',
'mail': 'user@default',
'name': 'User'}):
self.data = data
self.age = self.data['age']
self.gender = self.data['gender']
self.mail = self.data['mail']
self.name = self.data['name']
def __str__(self):
"""The string representation of a User object."""
return self.name
def get_age(self):
"""Return the user's age."""
return self.age
def get_gender(self):
"""Return the user's gender."""
return self.gen
def get_mail(self):
"""Return the user's email address."""
return self.mail
def get_name(self):
"""Return the user's name."""
return self.name
def get_data(self):
"""Return a dictionary containing a User's info."""
return self.data
if __name__=="__main__":
user_data = {} # will contain our data
# ask for user input
for key in ["age", "gender", "mail", "name"]:
user_data[key] = raw_input("Enter your %s: " % key)
# Store user input data in an object
user = User(data=user_data)
print user.get_data() # prints a dictionary containing user values
你有问题
<> P>此外,我认为你可能想考虑存在。也就是说,如果我对您使用用户数据的假设是正确的。您不必将用户的属性保存在一组数组列表中,而可以将用户的属性保存在一种称为数组的东西中。我的意思是,如果你的用户最终拥有2000个属性,你是否想记住哪个属性编号代表他们的眼睛颜色,这样你就可以在列表中引用它?可能不会。哈哈
这种方法可能会使您的代码更易于使用/重用,并在将来更有条理:
class User():
"""A class representing a user.
defaults set.
"""
def __init__(self, data={'age': 1,
'gender': 'x',
'mail': 'user@default',
'name': 'User'}):
self.data = data
self.age = self.data['age']
self.gender = self.data['gender']
self.mail = self.data['mail']
self.name = self.data['name']
def __str__(self):
"""The string representation of a User object."""
return self.name
def get_age(self):
"""Return the user's age."""
return self.age
def get_gender(self):
"""Return the user's gender."""
return self.gen
def get_mail(self):
"""Return the user's email address."""
return self.mail
def get_name(self):
"""Return the user's name."""
return self.name
def get_data(self):
"""Return a dictionary containing a User's info."""
return self.data
if __name__=="__main__":
user_data = {} # will contain our data
# ask for user input
for key in ["age", "gender", "mail", "name"]:
user_data[key] = raw_input("Enter your %s: " % key)
# Store user input data in an object
user = User(data=user_data)
print user.get_data() # prints a dictionary containing user values
if-yn==No:part-datacheck更改为datacheckage,gen,mail,name if-yn==No:part-datacheck更改为datacheckage,gen,mail,name这是无限循环吗?这是无限循环吗?谢谢。今后,我将研究如何使用此功能:@用户3687911很酷。没问题!非常感谢。今后,我将研究如何使用此功能:@用户3687911很酷。没问题!