>[info] 本练习,是根据前面学习的知识而设置,请独立完成功能。如果你还无法独立完成以下练习,则证明还没有掌握前面的章节,好好回顾一下吧。
## 题目要求:
>[success]
>1. 让用户输入账号与密码
>2. 如果账号密码匹配(用户名:Milton,密码:123456),则提示欢迎信息,退出程序
>3. 如果账号不存在,则提示账号不存在,重新回到步骤1
>4. 如果密码不匹配,则提示密码有误,重新回到步骤1
>5. 密码连续错误3次以上,提示账号已被锁定,重新回到步骤1
## 规则
* 请独立完成实战要求,完成后再参考下面的示例代码
* 如果觉得自己的代码<span style="color:red">*更加优雅,更加高效*</span>,欢迎留言**,与大家一起**分享**哦~
:-: <span style="color:green;font-size:30;">一起来挑战吧~</span>
<br>
## 参考代码
```python
# 用户数据
users = [
{'name': 'Milton', 'password': '123456', 'errors': 0},
{'name': 'Cherish', 'password': '654321', 'errors': 0}
]
while True:
user = None
index = None
input_name = input("用户名:").strip()
input_pwd = input("密码:").strip()
# 从用户数据中查找用户名匹配的数据
for i, item in enumerate(users):
if input_name == item.get("name"):
index = i
user = item
break
# 如果用户名存在
if user:
# 用户错误次数3次以上
if int(user["errors"]) >= 3:
print("您的账号已被锁定,请联系管理员")
continue
# 密码匹配
if input_pwd == user.get("password"):
print("恭喜您,登录成功")
break
# 密码不匹配
else:
# 更新用户错误次数
user["errors"] = int(user.get("errors")) + 1
users[index] = user
# 密码不匹配时的提示
if user["errors"] >= 3:
print("您连续输入3次错误密码,账号已被锁定,请联系管理员")
else:
print("密码不匹配!")
# 用户不存在
else:
print("用户名不存在!")
```
### 代码解释:
1. 这里使用了前面章节介绍的列表与字典来存储用户信息
```python
users = [
{'name': 'Milton', 'password': '123456', 'errors': 0},
{'name': 'Cherish', 'password': '654321', 'errors': 0}
]
```
2. 巧用while True 死循环,直到正确登录后才退出程序,否则一直循环让用户输入
3. 获取到用户的输入用户名后,从用户列表中遍历寻找,如果找得到用户名相等的用户字典,则将该用户的索引位置index和值user提取出来。方便后面修改user中的登录错误次数,然后根据索引位置更新用户列表中的数据
4. 完成步骤3的循环后,主要判断逻辑如下:
```python
如果user存在:
如果用户登录错误次数大于3:
提示已锁定
否则:
如果密码匹配:
登录成功,退出程序
否则:
登录错误次数+1
提示密码不匹配
否则:
提示用户不存在
```
<hr style="margin-top:100px">
:-: ![](https://box.kancloud.cn/2ff0bc02ec938fef8b6dd7b7f16ee11d_258x258.jpg)
***微信扫一扫,关注“python测试开发圈”,了解更多测试教程!***
- 前言
- chapter01_开发环境
- chapter02_字符串的使用
- chapter03_列表的使用
- chapter04_字典的使用
- chapter05_数字的使用
- chapter06_元组的使用
- chapter07_集合的使用
- chapter08_输入输出
- chapter09_控制流程
- chapter10_实例练习_登录1
- chapter11_python函数入门
- chapter12_python中的类
- chapter13_轻松玩转python中的模块管理
- chapter14_掌握学习新模块的技巧
- chapter15_通过os模块与操作系统交互
- chapter16_子进程相关模块(subprocess)
- chapter17_时间相关模块(time & datetime)
- chapter18_序列化模块(json)
- chapter19_加密模块(hashlib)
- chapter20_文件的读与写
- chapter21_阶段考核2_登录
- chapter22_小小算法挑战(排序&二分法)
- chapter23_用多线程来搞事!
- chapter24_HTTP接口请求(requests)
- chapter25_接口测试框架(pytest)
- chapter26_阶段考核3_HTTP接口测试
- chapter27_HTML解析(pyquery)
- chapter28_阶段考核4_爬虫下载网易汽车
- chapter29_python中的那些编码坑
- chapter30_MySQL数据库操作
- chapter31 高级特性_迭代器与生成器
- chapter32 高级特性_装饰器
- chapter33 高级特性_列表处理