基于OOP的登录模块开发:用户存在性校验失败问题求助
登录模块校验失败问题解决
问题描述
使用OOP开发登录模块,在类初始化方法中定义了管理员账号密码的列表和字典,编写login函数处理用户输入,但无论输入正确的账号密码,始终提示“用户不存在”,请求修复。
原始代码
class LoginSection: def __init__(self): self.user_data = ['admin','password'] self.username_password = {admin:password} def login(self): ''' Login interface ''' logged_in = False while not logged_in: print("\nLOGIN") curr_user = input("Username: ") curr_pass = input("Password: ") if curr_user not in self.username_password.keys(): print("User does not exist") continue if curr_pass != self.username_password[curr_user]: print("incorrect password") continue print("Login Successful!") logged_in = True
问题原因与解决方法
核心问题
初始化字典self.username_password时,admin和password没有加引号,被解释器当作未定义的变量,而非字符串字面量。这会导致字典的键值完全不符合预期,自然永远匹配不上用户输入的"admin"和"password"。
修复步骤
修正字典初始化语法
把字典的键和值改为字符串,或复用已有的self.user_data列表(更灵活):- 直接写死字符串:
self.username_password = {'admin': 'password'} - 复用列表元素:
self.username_password = {self.user_data[0]: self.user_data[1]}
- 直接写死字符串:
优化存在性判断(可选)
判断用户是否存在时,无需调用.keys(),直接用curr_user in self.username_password即可,字典本身支持直接检查键的存在性,代码更简洁。
修改后的完整代码
class LoginSection: def __init__(self): self.user_data = ['admin','password'] # 复用列表元素构建字典,避免重复写字符串 self.username_password = {self.user_data[0]: self.user_data[1]} def login(self): ''' Login interface ''' logged_in = False while not logged_in: print("\nLOGIN") curr_user = input("Username: ") curr_pass = input("Password: ") # 直接判断键是否在字典中 if curr_user not in self.username_password: print("User does not exist") continue if curr_pass != self.username_password[curr_user]: print("incorrect password") continue print("Login Successful!") logged_in = True
内容的提问来源于stack exchange,提问作者user22966617
相关产品推荐
相关产品推荐

