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

Python登录程序For循环仅读取文本文件最后一行的问题解决(限用数组)

问题诊断

你遇到的问题核心是没有正确地将每一行的邮箱和密码添加到数组(列表)中——原来的代码里,email_l = email和pass_l = password是把变量直接覆盖成当前循环行的单个值,而不是把值追加到数组里。循环结束后,这两个变量自然只保留了最后一行的内容,所以只能匹配最后一个用户的信息。

修改后的代码

按照你要求的仅使用数组(Python列表)的限制,我调整了代码如下:

# 初始化三个数组,分别存储用户名、邮箱、密码
name_l = []
email_l = [] 
pass_l = [] 

# 读取文件内容并解析每一行
with open("lab6.txt", "r") as f:
    content = f.readlines() 
    for line in content: 
        s = line.rstrip() 
        # 拆分每行数据,注意变量数量要和文件里的字段对应
        name, email, password, cn, dob, citi, emergency, creditcardnum, creditcardexp, points = s.split(",") 
        # 将当前行的信息追加到对应的数组中
        name_l.append(name)
        email_l.append(email)
        pass_l.append(password)

# 登录验证逻辑
usergmail = input("enter gmail:")
# 检查输入的邮箱是否在邮箱数组中
if usergmail in email_l:
    # 获取该邮箱对应的索引,用来匹配密码和用户名
    user_index = email_l.index(usergmail)
    passcode = input("enter password:")
    # 通过索引从密码数组中取出对应密码进行验证
    if passcode == pass_l[user_index]:
        print(f"Login successful! Welcome {name_l[user_index]}")
        # 这里假设display_user()是你已经定义好的函数
        display_user() 
    else:
        print("Wrong Password!")
else:
    print("Wrong gmail")
关键修改说明
  • 数组初始化与追加:保留数组的初始空列表定义,循环里用append()方法把每一行的邮箱、密码、用户名添加到对应的数组中,这样数组里就会存储所有用户的信息,而不是只保留最后一行。
  • 通过索引匹配对应信息:当找到匹配的邮箱时,用email_l.index(usergmail)获取该邮箱在数组中的位置,然后用这个索引从pass_l和name_l中取出对应的密码和用户名,保证信息一一对应。
  • 使用with语句处理文件:这是Python中更安全的文件操作方式,会自动帮你关闭文件,避免资源泄漏。
额外提示

如果你的display_user()函数需要展示当前登录用户的更多信息,你可以再创建对应的数组(比如存储联系方式、生日等),同样通过索引来获取对应的数据,保持所有数组的索引一致即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 02:47:38