要求:編寫登陸接口
輸入用戶名密碼
認(rèn)證成功后顯示歡迎信息
輸錯(cuò)三次后鎖定
針對(duì)此實(shí)例寫了有二種類型的腳本,略有不同,具體如下:
帳號(hào)文件account.txt內(nèi)容如下:
sam 123
david 12
kevin 123
lin 12
tailen 123
jack 12
鎖文件account_lock.txt默認(rèn)為空
一、只針對(duì)帳號(hào)文件里的用戶進(jìn)行判斷并鎖定,針對(duì)用戶和密碼各有三次錯(cuò)誤重試機(jī)會(huì)。
1、流程圖如下:
代碼如下:
#!/usr/bin/python27#_*_ coding:utf-8 _*_import sys,os,getpassos.system('clear')i = 0while i < 3: #只要用戶登錄異常不超過(guò)3次就不斷循環(huán) name = raw_input("請(qǐng)輸入用戶名:") lock_file = open('account_lock.txt','r+') #當(dāng)用戶輸入用戶名后,打開(kāi)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') #打開(kāi)帳號(hào)文件 user_list = user_file.readlines() for user_line in user_list: #對(duì)帳號(hào)文件進(jìn)行遍歷 (user,password) = user_line.strip('/n').split() #分別獲取帳號(hào)和密碼信息 if name == user: #如用戶名正常匹配 j = 0 while j < 3: #只要用戶密碼異常不超過(guò)3次就不斷循環(huán) passwd = getpass.getpass('請(qǐng)輸入密碼:') #輸入隱藏密碼 if passwd == password: #密碼正確,提示歡迎登錄 print('歡迎登錄管理平臺(tái),用戶%s' % name) sys.exit(0) #正常退出 else: print('用戶 %s 密碼錯(cuò)誤,請(qǐng)重新輸入,還有 %d 次機(jī)會(huì)' % (name,2 - j)) j += 1 #密碼輸入錯(cuò)誤后,循環(huán)值增加1 else: lock_file.write(name + '/n') #密碼輸入三次錯(cuò)誤后,將該用戶追加到LOCK文件 sys.exit('用戶 %s 達(dá)到最大登錄次數(shù),將被鎖定并退出' % name) else: pass #當(dāng)用戶沒(méi)匹配時(shí),跳過(guò)并繼續(xù)循環(huán) else: print('用戶 %s 不存在,請(qǐng)重新輸入,還有 %d 次機(jī)會(huì)' % (name,2 - i)) i += 1 #當(dāng)用戶輸入錯(cuò)誤時(shí),循環(huán)值增加1else: sys.exit('用戶 %s 不存在,退出' % name) #用戶輸入三次錯(cuò)誤后,異常退出 lock_file.close() #關(guān)閉LOCK文件user_file.close() #關(guān)閉帳號(hào)文件 二、針對(duì)帳號(hào)文件里的不存在的用戶也可以進(jìn)行判斷并鎖定,針對(duì)用戶和密碼共有三次錯(cuò)誤重試機(jī)會(huì)
代碼如下:
#_*_ coding:utf-8 _*_import sys,os,getpassos.system('clear')retry_limit = 3retry_count = 0account_file = 'account.txt'lock_file = 'account_lock.txt'while retry_count < retry_limit: #只要重試不超過(guò)3次就不斷循環(huán) username = raw_input('/033[31;43mUsername:/033[0m') username = username.strip() lock_check = open(lock_file) #當(dāng)用戶輸入用戶名后,打開(kāi)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') #打開(kāi)帳號(hào)文件 match_flag = False # 默認(rèn)為Flase,如果用戶match 上了,就設(shè)置為 True for line in f.readlines(): user,passwd = line.strip('/n').split() #去掉每行多余的/n并把這一行按空格分成兩列,分別賦值為user,passwd兩個(gè)變量 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)中跟本就沒(méi)有match上用戶名和密碼,所以需要繼續(xù)循環(huán) print('sorry,%s is unmatched' % username) retry_count += 1 #計(jì)數(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() 



















