作業要求:輸入用戶名,密碼認證成功顯示歡迎信息輸入錯誤三次後鎖定用戶Readme1.user_id.txt是存放用戶id及密碼的文件2.user_lock.txt是存放被鎖定的用戶id的文檔,預設為空.3.程式會對user_id.txt里的合法用戶id進行判斷,若連續輸入用戶id錯誤達三次程式直接退...
作業要求:
- 輸入用戶名,密碼
- 認證成功顯示歡迎信息
- 輸入錯誤三次後鎖定用戶
Readme
1.user_id.txt是存放用戶id及密碼的文件
2.user_lock.txt是存放被鎖定的用戶id的文檔,預設為空.
3.程式會對user_id.txt里的合法用戶id進行判斷,若連續輸入用戶id錯誤達三次程式直接退出.
4.程式會輸入對正確用戶名後的密碼進行判斷,輸入密碼有3次機會,連續三次錯誤則會鎖定用戶id並且退出.
流程圖:
代碼:
#!/user/binenv python3 # -*- coding:utf-8 -*- ''' Created on: 2015年1月16日 @author: 呂毅 Email: [email protected] Version: 1.0 Description: 輸入用戶名密碼,認證成功顯示歡迎信息,認證失敗,輸錯三次後鎖定 ''' import sys,os,getpass os.system('clear') #把終端代碼頁面清空,提供個乾凈的視覺 i = 0 while i < 3: #只要用戶登錄異常不超過3次就不斷迴圈 username = input("請輸入用戶名:") lock_file = open('user_lock.txt','r+') #當用戶輸入用戶名後,打開LOCK 文件 以檢查是否此用戶已經LOCK了 lock_list = lock_file.readlines() for lock_line in lock_list: #迴圈LOCK文件 lock_line = lock_line.strip('\n') #去掉換行符 if username == lock_line: #如果LOCK了就直接退出 sys.exit('=======WARNING:該賬號 %s 已經被凍結========' % username) user_file = open('user_id.txt','r') #打開帳號文件 user_list = user_file.readlines() for user_line in user_list: #對帳號文件進行遍歷 (user,password) = user_line.strip('\n').split() #分別獲取帳號和密碼信息 if username == user: #如用戶名正常匹配 m = 0 while m < 3: #只要用戶密碼異常不超過3次就不斷迴圈 passwd = getpass.getpass('請輸入密碼:') #輸入密碼,相對安全 if passwd == password: #密碼正確,提示歡迎登錄 print('HI,%s,歡迎登錄系統' % username) sys.exit(0) #正常退出 else: if m != 2: #m=2時,是最後一次機會,不用在提示還剩餘0次機會了 print('用戶 %s 密碼錯誤,請重新輸入,還有 %d 次機會' % (username,2 - m)) m += 1 #密碼輸入錯誤後,迴圈值增加1 else: lock_file.write(username + '\n') #密碼輸入三次錯誤後,將該用戶追加到LOCK文件 sys.exit('用戶 %s 達到最大登錄次數,請聯繫管理員!!' % username) else: pass #當用戶沒匹配時,跳過並繼續迴圈 else: if i != 2: #i=2時,是最後一次機會,不用在提示還剩餘0次機會了 print('用戶 %s 不存在,請重新輸入,還有 %d 次機會' % (username,2 - i)) i += 1 #當用戶輸入錯誤時,迴圈值增加1 else: sys.exit('用戶 %s 不存在,退出' % username) #用戶輸入三次錯誤後,異常退出 lock_file.close() #關閉lock文件 user_file.close() #關閉user_id文件