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

如何用Python编写注册登录程序?现有代码报用户名未定义怎么解决?

问题排查与修复方案

核心问题点

  • 注册函数register内部的用户名、密码列表是局部变量,每次调用都会重新初始化,且你调用时没有接收返回的注册数据,所有注册信息执行完函数就直接销毁了
  • 登录分支调用login前,手动把usernames、passwords初始化为空列表,传入登录函数的本身就是没有数据的空列表
  • 登录函数login内部第一行又重新给传入的usernames、passwords赋值为空列表,就算外部传入了正确数据也会被清空
  • 现有平行列表的存储逻辑,当输入不存在的用户名时,list.index()方法会直接抛出异常,无法正常提示用户名不存在

修复后的可运行代码

# 把存储账号信息的列表放到全局,避免每次调用函数被重置
usernames = []
passwords = []

def register():
    # 不需要在函数内重新初始化列表,直接用全局的存储
    input("Enter your name:")
    usernames.append(input("choose your username:"))
    passwords.append(input("choose your password:"))
    print("注册成功")

def login(usernames,passwords):
    # 不要清空传入的账号数据
    username=input("Enter your username:")
    password=input("Enter your Password:")
    # 先判断用户名是否存在,避免index报错
    if username not in usernames:
        print("用户名未定义")
        return
    if password == passwords[usernames.index(username)]:
       print("welcome")
    else:
       print("incorrect!")

account_ans=""
while True:
    account_ans=input("choose:  a)Sign Up     b)login and shop     c)quit: ")
    if account_ans=="a":
       register()
    if account_ans=="b":
       # 直接传入全局保存的账号列表,不要手动清空
       login(usernames,passwords)
    if account_ans=="c":
        break

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 19:45:03