作業需求:
- 輸入用戶名密碼
- 認證成功后顯示歡迎信息
- 輸錯三次后鎖定
實現思路:
- 判斷用戶是否在黑名單,若在黑名單,則將用戶鎖定
- 判斷用戶是否存在,若不存在,提示用戶不存在
- 若用戶存在,判斷登錄密碼是否正確,若正確,則歡迎用戶成功登錄,提供用戶三次密碼輸入機會,若三次輸入錯誤,則將賬戶鎖定
方式一:
#!/usr/bin/env python3 # -*- coding: utf-8 -*- count = 0 #計數器 username = "aaa" #登錄用戶名 userpassword = "asd" #登錄密碼 #讀取黑名單用戶 f = open("aaa.txt","r") file_list = f.readlines() f.close() lock= [] name = input("登錄用戶名:") #判斷用戶是否在黑名單 for i in file_list: line = i.strip("\n") lock.append(line) if name in lock: print("你的賬戶已鎖定,請聯系管理員。") else: #如果用戶沒有在黑名單,判斷用戶是否存在 if name == username: #如果密碼連續輸錯了三次,鎖定賬號 while count <3: password = input("登錄密碼:") if name == username and password == userpassword: print("歡迎%s!"%name) break else: print("賬號和密碼不匹配") count +=1 else: print("對不起,您的賬號連續輸錯三次密碼已被鎖定,請聯系管理員。") f = open("aaa.txt","w+") li = ['%s'%username] f.writelines(li) f.close() else: print("用戶名不存在,請輸入正確的用戶名。")
方式二:
1 #新建兩個文件,account.txt和account_lock.txt,在account中輸入aaa 123 2 #其中account.txt采用只讀形式,account_lock.txt則采用讀寫形式 3 import sys,os 4 count = 0 5 name_list = [] 6 while count < 3: 7 name = input("請輸入用戶名:") 8 lock_file = open("account_lock.txt","r+") #讀取黑名單,"r+":打開一個文件用於讀寫,"r":以只讀方式打開文件 9 lock_list = lock_file.readlines() 10 #.readlines():一次讀取整個文件,並將內容分析成一個行的列表,與.read()一樣 11 #.readline():一次讀取一行,當內存不夠時使用.readline() 12 for lock_line in lock_list: 13 lock_line = lock_line.strip('\n') 14 if name == lock_line: 15 #如果輸入的用戶名位於黑名單,則程序異常退出 16 sys.exit("用戶%s已經被鎖定,請聯系管理員解鎖." %name) 17 #讀取正確的用戶名和密碼 18 user_file = open("account.txt","r") 19 user_list = user_file.readlines() 20 for user_line in user_list: 21 (user,password) = user_line.strip('\n').split() 22 name_list.append(user_line) #.append():用於在列表末尾添加新的對象 23 print("---------",name_list) 24 #用戶名正確,密碼輸入計數 25 if name == user: 26 i = 0 27 while i<3: 28 passwd = input("請輸入密碼:") 29 if passwd == password: 30 print("歡迎%s登錄"%name) 31 sys.exit(0) 32 else: 33 if i<2: 34 print("用戶%s密碼錯誤,請重新輸入,還有%d機會."%(name,2-i)) 35 i += 1 36 else: 37 lock_file.write(name + '\n') 38 sys.exit("用戶%s輸錯密碼三次,用戶將被鎖定並退出,請聯系管理員解鎖."%name) 39 else: 40 pass 41 else: 42 #用戶名輸入錯誤計數 43 if count < 2: 44 print("用戶%s不存在,請重新輸入,還有%d次機會"%(name,2-count)) 45 count += 1 46 else: 47 sys.exit("用戶%s不存在,退出"%name) 48 #關閉已經打開的文件 49 lock_file.close() 50 user_file.close()