|
问题分析:
1. register 应该是个字典保存用户名和密码,但当前被覆盖为字符串
2. 登录成功后缺少退出多层循环的机制
3. 用户名不存在时的错误处理有逻辑问题(错误地使用了register=input())
4. 密码比对逻辑需要改进
修正后的代码:
- import hashlib
- register = {} # 初始化字典保存用户数据
- while True:
- cmd = input('请输入指令(1注册 2登录 3退出):')
-
- if cmd == '1':
- name = input('请输入用户名:')
- if name in register:
- print('该用户名已存在')
- else:
- pwd = input('请输入密码:')
- hashed_pwd = hashlib.md5(pwd.encode()).hexdigest()
- register[name] = hashed_pwd # 正确保存键值对
- print('注册成功~')
-
- elif cmd == '2':
- login_success = False # 登录状态标记
-
- while not login_success:
- name = input('用户名:')
- if name not in register:
- print('用户不存在')
- continue # 继续用户名循环
-
- # 密码重试最多3次
- for _ in range(3):
- pwd = input('密码:')
- hashed_pwd = hashlib.md5(pwd.encode()).hexdigest()
-
- if hashed_pwd == register[name]:
- print('登录成功!')
- login_success = True
- break # 退出密码循环
- else:
- print('密码错误')
-
- if login_success:
- break # 退出用户名循环
-
- # 登录成功后自动返回主循环
-
- elif cmd == '3':
- break
复制代码
主要改进点:
- 使用register = {}作为用户数据库(字典结构)
- 增加登录状态标记login_success控制循环层级
- 限制密码最多尝试3次(安全改进)
- 修复用户不存在时的错误处理逻辑
- 注册时正确保存用户名和密码的对应关系
这样修改后:
1. 注册成功时会保存用户名和对应的哈希密码
2. 登录成功后会自动退回到主指令循环
3. 密码错误超过3次会返回用户名输入界面
4. 输入3可以正常退出程序
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|