如何用append将注册输入存入数组实现登录?解决AttributeError报错
问题分析与修复
错误原因
- 变量覆盖导致
append报错:在reg函数里,你写了uname = input(...),这会创建一个局部字符串变量,直接覆盖了全局的uname数组。之后调用uname.append(uname)时,实际是在操作字符串,自然会抛出AttributeError。 - 登录逻辑错误:
log函数里直接拿数组uname和字符串askuname比较,永远不会相等,因为类型都不一样。 - 换行符错误:
print("/n")里的斜杠方向错了,应该是\n才能实现换行。
修复后的代码
uname = [] def reg(): # 用不同变量名存储输入的用户名,避免覆盖全局数组 new_uname = input("save your username here: ") uname.append(new_uname) print("Welcome user!") def log(): print("This is the Login Page") askuname = input("please enter your username: ") # 判断输入的用户名是否在数组中 if askuname in uname: print("you have successfully logged in!") else: print("Your username does not exist") def main(): print("Hello User, What would you like to do?") print("1 - Register your name") print("2 - Login") x = input("Please select the corresponding number to proceed: ") if x == "1": print() reg() elif x == "2": # 修正换行符 print("\n") log() else: print("incorrect input") main()
额外说明
如果一定要在函数里用同名变量操作全局数组,可以在函数开头加global uname声明,但用不同变量名更清晰,避免混淆。当前代码仅将用户名存储在内存中,程序重启后数据会丢失,若需要持久化存储,可添加文件读写逻辑。
内容的提问来源于stack exchange,提问作者mamamia123
相关产品推荐
相关产品推荐

