作業:編寫登錄接口
- 輸入用戶名密碼
- 認證成功后顯示歡迎信息
- 輸錯三次后鎖定
針對此實例書寫內容具體如下:
賬戶文件account.txt內容如下:
Tamir 123
test1 123
test2 123
test3 123
賬戶鎖定文件account_lock.txt默認為空
針對賬號文件(account.txt)里的用戶進行判斷並鎖定,針對用戶和密碼各有三次錯誤重試機會。
1.流程圖如下:
代碼如下:
1 # -*- coding:utf-8 -*- 2 # Author:Steven Kang 3 4 import os,sys,getpass #導入os,sys,getpass 模塊 5 u = 0 #用戶的循環次數 6 while u < 3: 7 username = input("請輸入您的用戶名:") #使用input 讓用戶輸入並賦值給username變量 8 lock_file = open('account_lock.txt','r+') #打開account_lock文件,權限是讀取更新,並賦值給lock_f變量 9 lock_list = lock_file.readlines() #使用.readlines的方法逐行讀取account_lock文件,並賦值給lock_list變量 10 11 for lock_line in lock_list: #使用for循環讀取account_lock的內容 12 lock_line = lock_line.strip('\n') #使用.strip()的方法去點換行符 13 if username == lock_line: 14 print('用戶 %s 已經鎖定,請聯系您的系統管理員' % username) #如果存在打印輸出 15 sys.exit(1) #跳出循環 16 user_file = open('account.txt','r') #打開account文件,權限是讀取更新,並賦值給user_f變量 17 user_list = user_file.readlines() #使用.readlines的方法逐行讀取account文件,並賦值給user_list變量 18 for user_line in user_list: #使用for循環讀取account的內容 19 (user,passwd) = user_line.strip('\n').split() #分別獲取賬號和密碼信息 20 if username == user: #使用if判斷用戶輸入的用戶是否在normal_user中存在 21 p = 0 #輸入密碼的循環次數 22 while p < 3: #只要用戶登錄異常不超過3次就不斷循環 23 password = getpass.getpass('請輸入您的密碼:') #使用getpass模塊的.getpass方法讓用戶輸入密碼(輸入的時候不會顯示) 24 if password == passwd: #使用if判斷用戶輸入的密碼在normal_user中是否存在(相等) 25 print('歡迎 %s 登錄系統' %username) #用戶名密碼全部相等(存在)打印歡迎登錄信息 26 sys.exit(0) #跳出循環 27 else: 28 if p != 2: 29 print('對不起,%s 的密碼錯誤,請重新輸入,您還有 %d 次機會'%(username,2 - p)) 30 p += 1 #密碼輸入錯誤后,循環值增加1 31 else: 32 lock_file.write(username + '\n') #用戶名密碼輸入次數超過3次的用戶添加到account_lock文件中 33 #lock_f.write('%s \n' %username) 34 sys.exit('對不起 %s 用戶已經鎖定,請聯系管理員'% username) 35 else: 36 pass #當用戶沒匹配時,跳過並繼續循環 37 else: 38 if u != 2: #i=2時,是最后一次機會,不用在提示還剩余0次機會了 39 print('對不起,%s 輸入錯誤,請重新輸入,您還有 %d 次機會' %(username, 2 - u)) 40 u += 1 #當用戶輸入錯誤時,循環值增加1 41 else: 42 sys.exit('因為您的錯誤輸入,程序已經退出,請重新運行') #用戶輸入三次錯誤后,異常退出 43 lock_f.close() #關閉lock_f文件