求助:实现用户注册登录参与测验功能,需保存用户信息至文本文件
解决注册登录测验系统的文本存储问题
嘿,我看了你写的测验系统注册代码,确实有几个小坑需要填上,咱们一步步来搞定它!
现有代码的问题点
- 文件覆盖问题:你用
open("user_info.txt", "w")打开文件,这个模式会清空之前的内容重新写入,每次新用户注册都会把老用户的信息删掉,得换成追加模式"a"。 - 写入数据类型错误:
write()方法只接受字符串,你直接传数组array会抛出TypeError,得把用户信息转成格式化的字符串再写入。 - 登录功能未完成:目前只获取了用户名输入,还没实现从文件读取信息并验证密码的逻辑。
修改后的完整代码示例
# Quiz which tests a student's knowledge print("Welcome to my quiz!") start = input("Do you need to register or sign in? ").strip().lower() # 统一小写,避免大小写问题 if start == "register": name = input("What is your name? ").strip() age = input("What age are you? ").strip() year_group = input("What year of school are you in? ").strip() username = name[:3].lower() + age # 转小写,避免用户名大小写不一致 print(f"Your username is: {username}") password = input("Please input a password which you will remember: ").strip() # 用追加模式打开文件,每条用户信息占一行,字段用制表符分隔 with open("user_info.txt", "a") as text_file: # 把信息转成字符串,换行保存 user_data = "\t".join([name, age, year_group, username, password]) + "\n" text_file.write(user_data) print("Registration successful! You can now sign in.") elif start == "sign in": user_entry = input("Please enter your username: ").strip().lower() password_entry = input("Please enter your password: ").strip() # 处理文件不存在的情况 try: with open("user_info.txt", "r") as text_file: logged_in = False for line in text_file: # 拆分每行的用户数据 data = line.strip().split("\t") if len(data) != 5: continue # 跳过格式错误的行 stored_name, stored_age, stored_year, stored_user, stored_pwd = data if stored_user.lower() == user_entry and stored_pwd == password_entry: print(f"Welcome back, {stored_name}! Let's start the quiz.") logged_in = True # 这里可以添加测验的逻辑 break if not logged_in: print("Invalid username or password, or you haven't registered yet.") except FileNotFoundError: print("No users registered yet! Please register first.") else: print("Invalid input! Please enter 'register' or 'sign in'.")
关键改动说明
- 文件模式:用
"a"模式追加写入,保留所有用户信息;用with语句自动关闭文件,避免资源泄漏。 - 数据格式化:用制表符
\t分隔字段,换行保存,后续读取时可以轻松拆分每条用户信息。 - 鲁棒性优化:添加了输入的
strip()和大小写统一,避免因空格或大小写导致的匹配失败;处理了文件不存在的异常情况。 - 登录验证:遍历文件中的每一行,对比用户名和密码,匹配成功后进入测验环节。
内容的提问来源于stack exchange,提问作者user9215216
相关产品推荐
相关产品推荐

