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

登录程序仅读取文本文件最后一行,仅最后注册用户可登录的问题解决

问题分析与解决方案

你的代码问题出在登录验证逻辑上:遍历user.txt时,每次循环都会把当前行的用户名和密码覆盖赋值给username和password变量,循环结束后这两个变量仅保留最后一行的用户信息。后续的登录判断只和最后一行的用户对比,自然只有最后注册的用户能登录。

修改后的代码

# 用字典存储所有用户的账号密码,键为用户名,值为密码
user_credentials = {}

user_name = input("Please enter your username: ")
pass_word = input("Please enter your password: ")

# 仅读取用户信息文件,tasks.txt可在后续菜单操作时按需打开
with open("user.txt", "r") as f1:
    for line in f1:
        # 去除每行首尾空白(含换行符),跳过空行避免报错
        cleaned_line = line.strip()
        if not cleaned_line:
            continue
        # 分割用户名和密码
        username, password = cleaned_line.split(", ")
        user_credentials[username] = password

# 验证登录:检查用户名是否存在,且密码匹配
if user_name in user_credentials and user_credentials[user_name] == pass_word:
    print("Login successful!")
    # 菜单循环:登录成功后持续显示菜单,直到用户选择退出
    while True:
        menu = input('''Please select one of the following options:\n
        r - register a user 
        a - add task
        va - view all tasks
        vm - view my tasks
        e - exit ''').lower()
        
        # 示例:退出逻辑
        if menu == 'e':
            print("Exiting program.")
            break
        # 其他菜单选项的逻辑可在此补充
else:
    print("Invalid username or password!")

关键修改点

  1. 用户信息存储优化:用字典替代两个独立列表,直接通过用户名快速匹配对应密码,验证逻辑更简洁高效。
  2. 遍历处理优化:添加空行判断,避免文件中空行导致的分割报错;先清理行首尾空白,防止换行符、空格干扰分割结果。
  3. 登录验证逻辑修正:检查输入的用户名是否在字典中,且对应密码匹配,确保所有用户都能被验证。
  4. 菜单循环修正:用while True实现持续菜单交互,替代原代码中逻辑错误的while判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 23:52:39