Python读取user.txt做登录验证时原有admin账户失效问题求助
问题排查
- 凭证循环逻辑错误:
for lines in text遍历所有用户行时会持续覆盖valid_user和valid_password变量,循环结束后仅保留文件最后一行的用户凭证,因此只有最后注册的新用户可正常登录,之前写入的管理员账号永远无法匹配。 - 空白字符处理错误:
valid_user, valid_password.strip()属于无效写法,strip()会返回新的处理后字符串,不会修改原变量,行尾的换行符等空白字符会保留,导致凭证匹配失败。 - 校验逻辑位置错误:账号密码比对逻辑写在for循环外部,仅会和最后一个用户做校验;同时错误提示的判断条件有误,只要和最后一个用户不匹配就输出错误,不符合预期。
- 冗余代码:登录逻辑没有修改user.txt的操作,
user_file.seek(0)为无效冗余代码。
修复方案
优化后代码
from datetime import datetime import csv # 提前读取所有用户凭证,用with语法自动管理文件生命周期,无需手动关闭 with open("user.txt", "r", encoding="utf-8") as user_file: user_lines = user_file.readlines() login = False while not login: username = input("Enter your username: ").strip() password = input("Enter your password: ").strip() # 遍历所有用户逐一匹配 for line in user_lines: # 跳过空行避免拆分报错 line = line.strip() if not line: continue valid_user, valid_pwd = line.split(", ") valid_user = valid_user.strip() valid_pwd = valid_pwd.strip() if valid_user == username and valid_pwd == password: login = True print("Logging in...") # 匹配到就终止循环,无需继续遍历 break # 全部遍历完仍未匹配到,输出错误提示 if not login: print("Invalid login details")
内容的提问来源于stack exchange,提问作者newt
相关产品推荐
相关产品推荐

