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

Python无GUI登录系统注册功能无法正确检测重复用户名问题求助

问题根因

你的注册逻辑失效是3个问题共同导致的:

  • a+模式打开文件时,文件指针默认停在文件末尾,直接调用readlines()读不到之前存储的账户内容,校验逻辑直接走了写入分支
  • 就算读到了文件内容,你直接判断用户名 in 行列表,但每行的格式是用户名 , 密码\n,不可能和单独的用户名匹配成功
  • 额外问题:Login函数定义要求传入用户名、密码参数,但start()里调用Login()没有传参,走到登录流程会直接报错
修复方法

调整注册逻辑:先以只读模式打开文件提取所有已注册用户名校验,确认未占用后再用追加模式写入新账户,同时修复登录调用的参数问题。

修复后的完整代码如下:

def start():
    option =  input('Welcome to Skies site!\nLogin or register?: ')
    if (option != 'login' and option != 'register'):
        print('Invalid input, try again.')
        start()
    elif option == 'login':
        # 补充登录时的用户名密码输入逻辑
        username = input('Enter username: ')
        password = input('Enter password: ')
        Login(username, password)
    elif option == 'register':
        Register()

def Login(username, password):
    success = False 
    file = open('user_details.txt','r')
    for i in file:
        a,b = i.split(',')
        a = a.strip() # 移除用户名前后的空格、换行符
        b = b.strip()
        if (a==username and b==password):
            success = True
            break
    file.close()
    if success == True:
        print('Login Successful!')
    else:
        print('Wrong username or password. Try again.')

def Register():
    username = input('Enter username: ')
    password = input('Enter password: ')
    # 先读文件校验用户名
    is_exist = False
    try:
        with open('user_details.txt','r') as file:
            for line in file:
                if not line.strip():
                    continue
                saved_username = line.split(',')[0].strip()
                if saved_username == username:
                    is_exist = True
                    break
    except FileNotFoundError:
        # 文件不存在说明还没有注册过账户,直接走写入逻辑
        pass
    
    if is_exist:
        print('Username taken. Try another')
        Register()
    else:
        print('Username available!')
        with open('user_details.txt','a') as file:
            file.write(f'\n{username} , {password}')
        print('Credentials Saved!')
        print('--> Log in now <--')
        Login(username, password)

def user_info(username, password, verify):
    print('>>>>>>>>>>>>>>>>>>>>')
    print('Account is: ACTIVE')
    print('Username: '+username)

start()
补充说明
  • 新增了文件不存在的异常捕获,第一次运行没有user_details.txt文件时不会报错
  • 用户名比对前先做了strip()处理,避免空格、换行符导致的匹配失败
  • 移除了不必要的全局变量声明,避免变量污染

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:39:02