Python实现用户名密码输入后存入同一文件用于后续登录验证
用户名密码持久化存储及登录验证实现方案
原有代码问题说明
你现有的代码存在逻辑错误:usernames和passwords变量是多个字符串拼接后的长字符串,只要输入内容是长字符串的子串就会判定匹配,完全不符合账号校验逻辑,会出现大量误判。
实现思路
我们使用同一个本地文件user_db.txt存储所有账号密码,每行存储一条账号信息,格式为用户名,密码,读写逻辑简单易维护:
- 注册流程:接收用户输入的新用户名和密码,校验用户名不重复后追加写入文件
- 登录流程:启动时先读取文件中所有的账号密码存入字典,校验时直接比对输入值和字典中存储的对应值
完整可运行代码
import time import sys # 存储账号的文件路径,所有账号都存在这个文件里 USER_DB_FILE = "user_db.txt" def load_user_db(): """读取存储的所有账号密码,返回字典格式 {用户名: 密码}""" user_dict = {} try: with open(USER_DB_FILE, 'r', encoding='utf-8') as f: for line in f: line = line.strip() if not line: continue username, password = line.split(',', 1) user_dict[username] = password except FileNotFoundError: # 文件不存在时返回空字典 pass return user_dict def register_user(): """注册新用户,写入同一个存储文件""" user_dict = load_user_db() while True: new_username = input("请输入新的用户名:").strip() if new_username in user_dict: print("用户名已存在,请换一个") continue new_password = input("请输入密码:").strip() if not new_username or not new_password: print("用户名和密码不能为空") continue # 追加写入文件,不覆盖原有内容 with open(USER_DB_FILE, 'a', encoding='utf-8') as f: f.write(f"{new_username},{new_password}\n") print("注册成功") break def login(): """登录校验逻辑""" user_dict = load_user_db() max_attempts = 3 attempts = 0 while True: username = input("请输入用户名:").strip() password = input("请输入密码:").strip() if user_dict.get(username) == password: print("Access Granted") break else: attempts += 1 if attempts >= max_attempts: print(f"已达到最大尝试次数 {attempts}") sys.exit() print("用户名或密码错误,10秒后重试") time.sleep(10) if __name__ == "__main__": choice = input("请输入1注册新用户,输入2登录:").strip() if choice == '1': register_user() elif choice == '2': login() else: print("输入错误")
核心逻辑说明
- 存储逻辑:使用追加模式
a打开文件写入新账号,所有账号都保存在同一个user_db.txt文件中,不会覆盖之前存储的内容 - 校验逻辑:每次登录前读取全量账号生成字典,校验时直接匹配,不会出现原有代码的子串匹配问题
- 注意:以上代码仅为功能演示,实际生产环境中禁止明文存储用户密码,需要对密码做哈希加密后再存储
内容的提问来源于stack exchange,提问作者Omegadude52
相关产品推荐
相关产品推荐

