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

