我想知道是否有人可以帮我弄清楚如何允许用户首先注册然后登录进行测验。我发现很难,因为用户的详细信息,如姓名,年龄和年份组以及用户名和密码需要保存到文本文件中。我已经完成了一些注册代码,但我仍感到困惑。
#quiz which tests a students knowledge
print "Welcome to my quiz!"
start = raw_input("Do you need to register or sign in?") #initial start up question
if start == "register": #registration
name = raw_input("What is your name?")
age = raw_input("What age are you?")
yearGroup = raw_input("What year of school are you in?")
username = (name[:3]+age)
print "You username is", username
password = raw_input("Please input a password which you will remember.")
text_file = open("user_info.txt", "w")
array = [name, age, yearGroup, username, password]
text_file.write(array)
text_file.close()
elif start == "sign in": #signing in
userEntry = raw_input("Please enter your username")
答案 0 :(得分:0)
您的第一个问题是您正在以列表的形式将用户数据写入文本文件。当您尝试从文件中读取它时,您将获得一个看起来像"[name, age, yearGroup, username, password]"
的字符串。而不是将其转换为列表,将其格式化为类似name+" "+str(age)+" "
等字符串。然后将其写入文件。当你读取文件时,你会得到另一个字符串。每个用户都会在不同的行上,因为您是单独编写的,因此您可以使用.split("\n")
。这将创建一个数组,其中每个元素都是文件中的一行。然后你必须遍历它并且在没有参数的情况下执行.split()
(它会自动按任何/所有空格分割)。如果您应用所有这些来获取列表content
,其中每个元素都是[name, age, yearGroup, username, password]
格式的用户数据,您将拥有:
f = open("user_info.txt", "r")
content = f.read()
content = content.split("\n")
for i in range(len(content)):
content[i] = content[i].split()
f.close()
如果要将整数元素转回整数,则修改for循环以执行此操作:
for i in range(len(content)):
content[i] = content[i].split()
for j in range(len(content[i])):
try:
content[i][j] = int(content[i][j])
except:
pass