一停做、要求:
- 輸入用戶名密碼
- 認證成功后顯示歡迎信息
- 輸錯三次后鎖定
二、程序流程圖
三悄谐、代碼
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author: Jeff Zhu
import getpass
usr_info = [
["Zhang San","asdf123","Logout"], #每個元素是一個列表寒瓦,有3個子元素,分別是用戶名皆刺,密碼林说,狀態(tài)
["Li Si","dsaff1","Logout"], #狀態(tài)有三種 Login劣摇,Logout,Locked
["Wang Wu","123456","Logout"],
["Zhao Er Ma Zi","888888","Logout"],
]
wrong_times = 0
while True:
usr_name_input = input("請輸入用戶名>>>")
for i in range(len(usr_info)):
if usr_info[i][0] == usr_name_input:
usr_index = i
break
else:
usr_index = -1
if usr_index != -1: #用戶存在
if usr_info[usr_index][2] != "Locked": #判斷用戶是否被鎖定
while wrong_times < 3:
#usr_pwd_input = input("請輸入密碼>>>")
usr_pwd_input = getpass.getpass("請輸入密碼>>>") #提示用戶輸入密碼
if usr_pwd_input == usr_info[usr_index][1]:#密碼正確
print("%s,Wellcome!"%usr_info[usr_index][0])
usr_info[usr_index][2] = "Login"#狀態(tài)變更為Login
wrong_times = 0
break
else:#密碼錯誤
print("密碼錯,請重新輸入")
wrong_times += 1
else:
print("連續(xù)輸錯3次,賬戶被鎖定")
usr_info[usr_index][2] = "Locked"
wrong_times = 0
if usr_info[usr_index][2] == "Login":
break
else:
print("該賬戶已被鎖定")#提示用戶已被鎖定
else:
print("用戶不存在")#提示用戶名不存在
四、小結
1、建立一個list把所有用戶的用戶名,密碼和狀態(tài)存進去蚪战,在流程分支控制時瞎疼,可以作為標志位來使用。
2、getpass在pycharm中無法使用,需要到命令行中才能起作用,之前還以為是程序問題,總是死在獲取密碼那里担平,后來發(fā)現是pycharm的問題空免。
3、用戶名查表那里,我使用了一個索引變量來指向查找的字符串,在C語言中經常使用此類技巧柑船,不知Python中還有沒有更好的方法逆巍。