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

Python登录系统elif语句故障及管理员登录次数限制实现问询

问题解决方案

一、修复log_in函数的elif逻辑错误

你的log_in函数主要存在三个核心问题:缩进不规范、条件逻辑脱离实际需求、缺少管理员身份区分机制,以下是具体修正步骤:

1. 先优化数据读取的潜在问题

原代码读取data.txt时未处理换行符,且未考虑字段数不匹配的异常情况,先调整这部分代码:

# 读取数据时过滤空行并去除换行符
with open('data.txt', 'r') as f:
    data = [line.strip() for line in f if line.strip()]

user_data = {}
for r in data:
    fields = r.split(",")
    # 新增role字段区分管理员/员工,确保字段数匹配避免解构报错
    if len(fields) == 6:
        id, username, date, gender, salary, role = fields
        user_data[username] = {
            "id": id,
            "name": username,
            "date of joining": date,
            "gender": gender,
            "salary": salary.strip(),
            "role": role.strip()
        }

注意:需要在data.txt每行末尾新增role字段(格式如,admin或,employee),用来标记用户身份。

2. 修正log_in函数的逻辑与缩进

原函数的缩进错误会直接导致语法报错,同时全依赖password==""的条件完全不符合业务需求,重新梳理后的逻辑:

def log_in(username, password):
    # 先判断用户是否存在
    if username not in user_data:
        print("用户不存在")
        return
    
    user_info = user_data[username]
    # 管理员登录分支(假设管理员统一密码为"admin123")
    if user_info["role"] == "admin":
        if password == "admin123":
            print("管理员登录成功,可执行薪资修改操作")
            # 在此添加管理员操作逻辑
        else:
            print("管理员密码错误")
    # 员工登录分支(假设员工密码为自身id)
    elif user_info["role"] == "employee":
        if password == user_info["id"]:
            print(f"员工登录成功,你的当前薪资为:{user_info['salary']}")
            # 在此添加员工查看薪资逻辑
        else:
            print("员工密码错误")
    else:
        print("未知用户角色")

二、实现管理员最多5次登录尝试功能

通过循环计数器单独限制管理员的登录次数,非管理员用户不受此限制,代码示例:

max_admin_attempts = 5
attempt_count = 0

while attempt_count < max_admin_attempts:
    username = input("Enter a username: ")
    password = input("Enter a password: ")
    
    # 仅对管理员用户触发次数限制
    if username in user_data and user_data[username]["role"] == "admin":
        attempt_count += 1
        if password == "admin123":
            print("管理员登录成功")
            # 执行管理员操作逻辑
            break
        else:
            remaining = max_admin_attempts - attempt_count
            print(f"密码错误,剩余尝试次数:{remaining}")
            if remaining == 0:
                print("登录次数耗尽,管理员账户暂时锁定")
    else:
        # 非管理员直接调用标准登录逻辑
        log_in(username, password)
        break

补充说明:

  • 若需要持久化锁定状态,可在次数耗尽时将锁定信息写入文件,下次启动程序时读取判断
  • 员工的登录验证规则可根据实际需求调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:55:44