>[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">
:-: 
***微信掃一掃,關注“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 高級特性_列表處理