Python登录系统:如何按用户名密码过滤数据至新列表并纠错
文本文件登录系统的代码修正与用户信息存储实现
你的代码存在以下几个关键问题:
- 数据读取方式错误:原文件是逗号分隔格式,但你用了默认的
split()(按空格分割),导致每个字段末尾带逗号(比如'test,'),无法和用户输入的test匹配。 - 错误提示逻辑混乱:只要遍历到不匹配的行就立刻打印错误,比如表头行肯定不匹配,会直接输出错误信息。
- 未实现登录用户信息存储:没有将匹配到的用户数据存入
loginuserdets列表。 - 循环未正确终止:登录成功后不会退出
while True循环,会持续要求输入账号密码。 - 大小写不兼容:存储的密码是
Tester123,用户输入tester123会匹配失败。
修正后的完整代码
def login(): print("\tUSER LOGIN") print("\t----------\n") userdets = [] loginuserdets = [] # 初始化存储登录用户信息的列表 # 正确读取逗号分隔的用户数据 with open("userdatabase.txt", "r") as db: next(db) # 跳过表头行 for row in db: # 去除换行符、首尾空格,再按逗号分割字段,同时清理每个字段的多余空格 cleaned_row = [field.strip() for field in row.strip("\n").strip().split(',')] userdets.append(cleaned_row) print(userdets) while True: username = input("Please Enter your username: ") userpassword = input("Please Enter your password: ") user_found = False for user_info in userdets: # 如需支持大小写不敏感,可改为 username.lower() == user_info[0].lower() if username == user_info[0] and userpassword == user_info[1]: print("Successfully logged in!") loginuserdets.append(user_info) # 将匹配的用户信息存入目标列表 user_found = True break if user_found: print(f"登录用户信息已保存:{loginuserdets}") break # 退出登录循环 else: print("Username or password incorrect! Please try again") # 调用登录函数 login()
关键修正说明
- 数据读取优化:改用
split(',')分割逗号分隔的行,再通过列表推导式清理每个字段的空格和残留逗号,确保字段格式为'test'而非'test,'。 - 跳过表头:用
next(db)跳过第一行的表头数据,避免无效匹配。 - 错误提示逻辑修正:通过
user_found标记,只有遍历完所有用户都未匹配时才打印错误。 - 实现用户信息存储:找到匹配用户后,用
loginuserdets.append(user_info)将其信息存入目标列表。 - 循环终止处理:登录成功后,先退出用户遍历循环,再通过
break退出外层的登录循环。 - 大小写兼容可选:如果需要支持大小写不敏感登录,可修改匹配条件为大小写统一转换后比较。
内容的提问来源于stack exchange,提问作者user7418
相关产品推荐
相关产品推荐

