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

Python登录验证程序出现重复输入账号密码问题

登录程序重复要求输入用户名密码的问题

我正在开发一个读取文本文件验证用户名和密码的Python程序,验证通过时会提示登录成功,但运行代码时会两次要求输入用户名和密码。

原程序代码

def login():
    loginUsername = input("Enter Username: ")
    loginPassword = input("Enter PASSWORD: ")

    with open('password.txt') as data:
        accounts = data.readlines()

    userfound = False
   
    for line in accounts:
        splitline = line.split("\t")
        
        if loginUsername == splitline[0] and loginPassword == splitline[1]:
            userfound = True
            break 
           
        
    return userfound

options = input("please make a choice 1 to register a new user account, 2 to login or 3 to exit to program \n")

user_found = login()

if options == "1":
    register()
elif options == "2":
    login()
elif options == "3":
    sys.exit()
else:
    print("Please make a valid choice")

 
if user_found:        
    print("LOGGED IN")
    # print menu 
else:
    print("Login FAILED")

运行示例(输入错误信息时)

please make a choice 1 to register a new user account, 2 to login or 3 to exit to program
2
Enter Username: 22
Enter PASSWORD: ww
Enter Username: ww
Enter PASSWORD: ww
Login FAILED


问题原因

你在获取用户操作选择之前就调用了login()函数(即user_found = login()这行),无论用户选注册、登录还是退出,都会先执行一次登录输入;之后当用户选择登录(选项2)时,又会再次调用login(),因此出现两次输入的情况。此外原代码还缺少sys模块导入,且未处理文件行末尾的换行符,可能导致密码匹配失败。

修复后的代码

import sys

def login():
    loginUsername = input("请输入用户名: ")
    loginPassword = input("请输入密码: ")

    with open('password.txt') as data:
        accounts = data.readlines()

    userfound = False
   
    for line in accounts:
        splitline = line.split("\t")
        # 去除字符串首尾的空白(包括换行符),避免匹配失败
        if loginUsername == splitline[0].strip() and loginPassword == splitline[1].strip():
            userfound = True
            break 
        
    return userfound

def register():
    # 可在此补充注册逻辑,比如将新用户信息写入password.txt
    print("注册功能待实现")

options = input("请选择操作:1 注册新账户,2 登录,3 退出程序 \n")

if options == "1":
    register()
elif options == "2":
    user_found = login()
    if user_found:        
        print("登录成功")
        # 此处添加菜单打印逻辑
    else:
        print("登录失败")
elif options == "3":
    sys.exit()
else:
    print("请输入有效的选项")

修复说明

  • 移除了顶部提前调用的login(),仅在用户选择登录时才执行登录验证
  • 导入sys模块,解决sys.exit()报错问题
  • 用strip()处理读取到的用户名和密码,去除换行符等空白字符,避免匹配失败
  • 将登录结果的判断逻辑移至登录分支内部,避免无关操作后仍输出登录结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 10:55:17