登录程序仅读取文本文件最后一行,仅最后注册用户可登录的问题解决
问题分析与解决方案
你的代码问题出在登录验证逻辑上:遍历user.txt时,每次循环都会把当前行的用户名和密码覆盖赋值给username和password变量,循环结束后这两个变量仅保留最后一行的用户信息。后续的登录判断只和最后一行的用户对比,自然只有最后注册的用户能登录。
修改后的代码
# 用字典存储所有用户的账号密码,键为用户名,值为密码 user_credentials = {} user_name = input("Please enter your username: ") pass_word = input("Please enter your password: ") # 仅读取用户信息文件,tasks.txt可在后续菜单操作时按需打开 with open("user.txt", "r") as f1: for line in f1: # 去除每行首尾空白(含换行符),跳过空行避免报错 cleaned_line = line.strip() if not cleaned_line: continue # 分割用户名和密码 username, password = cleaned_line.split(", ") user_credentials[username] = password # 验证登录:检查用户名是否存在,且密码匹配 if user_name in user_credentials and user_credentials[user_name] == pass_word: print("Login successful!") # 菜单循环:登录成功后持续显示菜单,直到用户选择退出 while True: menu = input('''Please select one of the following options:\n r - register a user a - add task va - view all tasks vm - view my tasks e - exit ''').lower() # 示例:退出逻辑 if menu == 'e': print("Exiting program.") break # 其他菜单选项的逻辑可在此补充 else: print("Invalid username or password!")
关键修改点
- 用户信息存储优化:用字典替代两个独立列表,直接通过用户名快速匹配对应密码,验证逻辑更简洁高效。
- 遍历处理优化:添加空行判断,避免文件中空行导致的分割报错;先清理行首尾空白,防止换行符、空格干扰分割结果。
- 登录验证逻辑修正:检查输入的用户名是否在字典中,且对应密码匹配,确保所有用户都能被验证。
- 菜单循环修正:用
while True实现持续菜单交互,替代原代码中逻辑错误的while判断。
内容的提问来源于stack exchange,提问作者Maverick45
相关产品推荐
相关产品推荐

