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

如何阻止重复用户名写入.txt文件?代码部分重复校验失效求助

问题原因

你的代码有两个核心问题:

  • 注册逻辑嵌套错误:把用户注册的while True循环放在了读取文件的for lines循环内部,导致程序读取第一行用户(admin)后就直接进入注册流程,根本没机会读取后续的用户(user),自然无法拦截user的重复提交。
  • 存在性判断错误:用x in alr_exists[keys]来判断用户名是否存在,这是在检查输入的用户名是否是当前读取的那个用户名的子串,而不是检查是否在所有已存在的用户名列表里。比如读取admin时,这个判断只能匹配包含admin的字符串,完全没用到整个alr_exists字典的所有键。
修复后的代码
alr_exists = {}

# 先一次性读取所有已存在的用户名到字典中
with open('user.txt', 'r') as file: 
    for line in file:
        # 按逗号分割,处理原数据中逗号后带空格的情况
        key, value = line.strip().split(', ')
        alr_exists[key.lower()] = value.lower()  # 统一转小写,避免大小写重复

while True: 
    x = input("要注册新用户,请输入用户名:\n").lower()
    if x in alr_exists:
        print(f'抱歉,用户名{x}已被占用,请重新输入。\n')
        continue
    # 密码确认逻辑
    y = input("请输入密码:\n").lower()
    z = input("请再次输入密码确认:\n").lower()
    if y != z:
        print("两次输入的密码不一致,请重新操作。\n")
        continue
    # 写入新用户到文件
    with open('user.txt', 'a') as file:
        file.write(f"{x}, {y}\n")
    alr_exists[x] = y  # 更新已存在用户字典,避免本次运行中重复注册
    print("注册成功!\n")
    # 可选:添加是否继续注册的判断
    cont = input("是否继续注册新用户?(y/n)\n").lower()
    if cont != 'y':
        break
关键修改说明
  • 拆分读取与注册逻辑:先完整读取所有历史用户到alr_exists字典,再进入注册循环,确保所有已存在用户都被纳入校验范围。
  • 修正存在性判断:用x in alr_exists直接检查输入用户名是否在字典键中,覆盖所有已存在用户的校验。
  • 补充密码一致性校验,以及写入文件后更新alr_exists的步骤,避免同一次运行内重复注册同一用户。
  • 处理了原数据中逗号后带空格的分割问题,避免读取到无效空格。

内容的提问来源于stack exchange,提问作者Cluelesspython

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 10:05:15