要求:
- 輸入用戶名,密碼
- 認證成功顯示歡迎信息
- 輸入錯誤三次后鎖定用戶
Readme:
1.normal_user是存放用戶id及密碼的文件
2.lock_file是存放被鎖定的用戶id的文檔,默認為空.
3.程序會對normal_user里的合法用戶id進行判斷,若連續輸入用戶id錯誤達三次程序直接退出.
4.程序會輸入對正確用戶名后的密碼進行判斷,輸入密碼有3次機會,連續三次錯誤則會鎖定用戶id並且退出.
流程圖:
代碼:

1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # @Time : 2016/12/1 15:24 4 # @Author : zjz10 5 # @Site : 6 # @File : login_interface.py 7 # @Software: PyCharm 8 import os,sys,getpass #導入os,sys,getpass 模塊 9 os.system('cls') #使用os模塊中的system方法傳入('cls')參數,達到清屏的效果 10 #os.system('clear') #這是在linux中清屏的方法 11 u = 0 #用戶的循環次數 12 while u < 3: #只要用戶登錄異常不超過3次就不斷循環 13 username = input('請輸入您的用戶名:') #使用input 使用戶輸入並賦值給username變量 14 15 lock_f = open('lock_file','r+') #打開lock_file文件,權限是讀取更新,並賦值給lock_f變量 16 lock_list = lock_f.readlines() #使用.readlines()的方法逐行讀取lock_file文件,並賦值給lock_list變量 17 18 for lock_line in lock_list: #使用for循環讀取lock_file的內容 19 lock_line = lock_line.strip('\n') #使用.strip()的方法去點換行符 20 if username == lock_line: #使用if 進行判斷用戶輸入的參數在lock_file文件中是否存在 21 print('用戶 %s 已經鎖定,請聯系您的系統管理員' % username) #如果存在打印輸出 22 sys.exit(1) #sys模塊的.exit()方法表示退出 23 24 #user_f = open('normal_user','r') #這樣的方式也是可行的 25 #user_list = user_f.readlines() #這樣的方式也是可行的 26 27 with open('normal_user','r') as user_f: #使用with open打開normal_user文件,權限是只讀,並as賦值給 28 user_list = user_f.readlines() #使用.readlines()的方法逐行讀取normal_user文件,並賦值給user_list變量 29 30 for user_line in user_list: #使用for循環讀取normal_user的內容 31 (user,passwd) = user_line.strip('\n').split() #分別獲取帳號和密碼信息 32 if username == user: #使用if判斷用戶輸入的用戶是否在normal_user中存在 33 p = 0 #輸入密碼的循環次數 34 while p < 3: #只要用戶登錄異常不超過3次就不斷循環 35 password = getpass.getpass('請輸入您的密碼:') #使用getpass模塊的.getpass方法讓用戶輸入密碼(輸入的時候不會顯示) 36 if password == passwd: #使用if判斷用戶輸入的密碼在normal_user中是否存在(相等) 37 print('歡迎 %s 登錄系統' %username) #用戶名密碼全部相等(存在)打印歡迎登錄信息 38 sys.exit(0) #sys模塊中的.exit()方法退出 39 else: 40 if p != 2: #p=2時,是最后一次機會,不用在提示還剩余0次機會了 41 print('對不起,%s 的密碼錯誤,請重新輸入,你還有 %d 次機會'%(username,2 - p)) 42 p += 1 #密碼輸入錯誤后,循環值增加1 43 else: 44 lock_f.write(username + '\n') 45 #lock_f.write('%s \n' %username) 46 sys.exit('對不起 %s 用戶已經鎖定,請聯系管理員' % username) 47 else: 48 pass #當用戶沒匹配時,跳過並繼續循環 49 else: 50 if u != 2: #i=2時,是最后一次機會,不用在提示還剩余0次機會了 51 print('對不起,%s 輸入錯誤,請重新輸入,你還有 %d 次機會' %(username,2 - u)) 52 u += 1 #當用戶輸入錯誤時,循環值增加1 53 else: 54 sys.exit('因為你的錯誤輸入,程序已經退出,請重新運行') #用戶輸入三次錯誤后,異常退出 55 lock_f.close() #關閉lock_f文件 56 #user_f.close()