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

基于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"。

修复步骤

  1. 修正字典初始化语法
    把字典的键和值改为字符串,或复用已有的self.user_data列表(更灵活):

    • 直接写死字符串:self.username_password = {'admin': 'password'}
    • 复用列表元素:self.username_password = {self.user_data[0]: self.user_data[1]}
  2. 优化存在性判断(可选)
    判断用户是否存在时,无需调用.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 19:52:42