You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 13:45:03