python從入門到精通(DAY 3)
要求:編寫登陸接口
輸入用戶名密碼
認(rèn)證成功后顯示歡迎信息
輸錯三次后鎖定
針對此實(shí)例寫了有二種類型的腳本,略有不同,具體如下:
帳號文件account.txt內(nèi)容如下:
sam 123
david 12
kevin 123
lin 12
tailen 123
jack 12
鎖文件account_lock.txt默認(rèn)為空
一、只針對帳號文件里的用戶進(jìn)行判斷并鎖定,針對用戶和密碼各有三次錯誤重試機(jī)會。
1、流程圖如下:

代碼如下:
#!/usr/bin/python27
#_*_ coding:utf-8 _*_
import sys,os,getpass
os.system('clear')
i = 0
while i < 3: #只要用戶登錄異常不超過3次就不斷循環(huán)
name = raw_input("請輸入用戶名:")
lock_file = open('account_lock.txt','r+') #當(dāng)用戶輸入用戶名后,打開LOCK 文件 以檢查是否此用戶已經(jīng)LOCK了
lock_list = lock_file.readlines()
for lock_line in lock_list: #循環(huán)LOCK文件
lock_line = lock_line.strip('\n') #去掉換行符
if name == lock_line: #如果LOCK了就直接退出
sys.exit('用戶 %s 已經(jīng)被鎖定,退出' % name)
user_file = open('account.txt','r') #打開帳號文件
user_list = user_file.readlines()
for user_line in user_list: #對帳號文件進(jìn)行遍歷
(user,password) = user_line.strip('\n').split() #分別獲取帳號和密碼信息
if name == user: #如用戶名正常匹配
j = 0
while j < 3: #只要用戶密碼異常不超過3次就不斷循環(huán)
passwd = getpass.getpass('請輸入密碼:') #輸入隱藏密碼
if passwd == password: #密碼正確,提示歡迎登錄
print('歡迎登錄管理平臺,用戶%s' % name)
sys.exit(0) #正常退出
else:
print('用戶 %s 密碼錯誤,請重新輸入,還有 %d 次機(jī)會' % (name,2 - j))
j += 1 #密碼輸入錯誤后,循環(huán)值增加1
else:
lock_file.write(name + '\n') #密碼輸入三次錯誤后,將該用戶追加到LOCK文件
sys.exit('用戶 %s 達(dá)到最大登錄次數(shù),將被鎖定并退出' % name)
else:
pass #當(dāng)用戶沒匹配時,跳過并繼續(xù)循環(huán)
else:
print('用戶 %s 不存在,請重新輸入,還有 %d 次機(jī)會' % (name,2 - i))
i += 1 #當(dāng)用戶輸入錯誤時,循環(huán)值增加1
else:
sys.exit('用戶 %s 不存在,退出' % name) #用戶輸入三次錯誤后,異常退出
lock_file.close() #關(guān)閉LOCK文件
user_file.close() #關(guān)閉帳號文件
二、針對帳號文件里的不存在的用戶也可以進(jìn)行判斷并鎖定,針對用戶和密碼共有三次錯誤重試機(jī)會
代碼如下:
#_*_ coding:utf-8 _*_
import sys,os,getpass
os.system('clear')
retry_limit = 3
retry_count = 0
account_file = 'account.txt'
lock_file = 'account_lock.txt'
while retry_count < retry_limit: #只要重試不超過3次就不斷循環(huán)
username = raw_input('\033[31;43mUsername:\033[0m')
username = username.strip()
lock_check = open(lock_file) #當(dāng)用戶輸入用戶名后,打開LOCK 文件 以檢查是否此用戶已經(jīng)LOCK了
for line in lock_check.readlines(): #循環(huán)LOCK文件
if username == line.strip('\n'): #去掉換行符
sys.exit('\033[35mUser %s is locked!!!\033[0m' % username) #如果LOCK了就直接退出
password = raw_input('\033[32;41mPassword:\033[0m') #輸入密碼
f = open(account_file,'r') #打開帳號文件
match_flag = False # 默認(rèn)為Flase,如果用戶match 上了,就設(shè)置為 True
for line in f.readlines():
user,passwd = line.strip('\n').split() #去掉每行多余的\n并把這一行按空格分成兩列,分別賦值為user,passwd兩個變量
if username == user and password == passwd: #判斷用戶名和密碼是否都相等
print('hello, %s !!' % username)
match_flag = True #相等就把循環(huán)外的match_flag變量改為了True
break #然后就不用繼續(xù)循環(huán)了,直接 跳出,因?yàn)橐呀?jīng)match上了
f.close()
if match_flag == False: #如果match_flag還為False,代表上面的循環(huán)中跟本就沒有match上用戶名和密碼,所以需要繼續(xù)循環(huán)
print('sorry,%s is unmatched' % username)
retry_count += 1 #計數(shù)器加1
else:
print('wlecome login my learning system!')
break #用戶成功登錄,退出腳本
else:
print("you account %s is locked!!!" % username)
g = open(lock_file,'a')
g.write(username) #被鎖用戶追加到用戶鎖文件
g.write('\n')
g.close()
相關(guān)文章
Python實(shí)現(xiàn)xml格式轉(zhuǎn)txt格式的示例代碼
VOC 的標(biāo)注是xml格式的,而YOLO是.txt格式,所以要實(shí)現(xiàn)VOC數(shù)據(jù)集轉(zhuǎn)YOLO數(shù)據(jù)集,只能利用代碼實(shí)現(xiàn)。所以本文為大家介紹了Python中xml轉(zhuǎn)txt的示例代碼,需要的可以參考一下2022-03-03
Kmeans均值聚類算法原理以及Python如何實(shí)現(xiàn)
這個算法中文名為k均值聚類算法,首先我們在二維的特殊條件下討論其實(shí)現(xiàn)的過程,方便大家理解。2020-09-09
matplotlib交互式數(shù)據(jù)光標(biāo)mpldatacursor的實(shí)現(xiàn)
這篇文章主要介紹了matplotlib交互式數(shù)據(jù)光標(biāo)mpldatacursor的實(shí)現(xiàn) ,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
Python拋出引發(fā)異常(raise)知識點(diǎn)總結(jié)
在本篇文章里小編給大家整理了關(guān)于Python拋出引發(fā)異常(raise)知識點(diǎn)總結(jié)內(nèi)容,有需要的朋友們可以學(xué)習(xí)參考下。2021-06-06
Python 把兩層列表展開平鋪成一層(5種實(shí)現(xiàn)方式)
這篇文章主要介紹了Python 把兩層列表展開平鋪成一層(5種實(shí)現(xiàn)方式),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04
基于python+opencv調(diào)用電腦攝像頭實(shí)現(xiàn)實(shí)時人臉眼睛以及微笑識別
這篇文章主要為大家詳細(xì)介紹了基于python+opencv調(diào)用電腦攝像頭實(shí)現(xiàn)實(shí)時人臉眼睛以及微笑識別,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09
Python深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)基本原理
人工神經(jīng)網(wǎng)絡(luò)(Artificial Neural Networks,簡寫為ANNs)也簡稱為神經(jīng)網(wǎng)絡(luò)(NNs)或稱作連接模型(Connection Model),它是一種模仿動物神經(jīng)網(wǎng)絡(luò)行為特征,進(jìn)行分布式并行信息處理的算法數(shù)學(xué)模型2021-10-10
python制作一個簡單的gui 數(shù)據(jù)庫查詢界面
這篇文章主要介紹了python制作一個簡單的gui 數(shù)據(jù)庫查詢界面,幫助大家更好的理解和學(xué)習(xí)python tkinter的使用,感興趣的朋友可以了解下2020-11-11

