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
相关产品推荐
相关产品推荐

