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

