實驗名稱:模拟登陸
實驗要求:
輸入使用者名密碼
認證成功顯示歡迎資訊
輸錯三次鎖定使用者
思路:
使用者輸入username
判斷username是否為真(檔案)。
否:提示使用者不存在;是:判斷是否鎖定(檔案)
如果使用者鎖定提示:該使用者已鎖定;沒鎖定就輸入密碼
循環三次(判斷密碼是否正确)
密碼超過三次不正确,就寫入鎖檔案
流程圖:
<a href="https://s1.51cto.com/oss/201711/02/3f9b32d65712b0a8ed38ee85b603dd44.png-wh_500x0-wm_3-wmp_4-s_1835019730.png" target="_blank"></a>
代碼實作:
#!/usr/bin/env python
#Author:Li QW
#加載sys子產品
import sys
#指定檔案路徑,這裡用的是絕對路徑
user_word='C:/Users/Administrator/Desktop/open.txt' #使用者檔案
close_word='C:/Users/Administrator/Desktop/close.txt' #鎖使用者檔案
f=open(user_word,'r') #打開檔案
user_info=f.read() # 讀取檔案
f.close() #讀取之後關閉檔案
user_lis= user_info.split("#") #以井号作為分隔符
dict = {} #導入字典
for item in user_lis: #賦給變量item
item_list=item.split(':') #以冒号作為分隔符
dict[item_list[0]]=item_list[-1]
count = 0 #計數器的作用
username = input("Input username:") #輸入使用者名
if username in dict:
l=open(close_word,'r')
black_info = l.read()
l.close()
black_list = black_info.split('#')
lock_dict = {}
for items in black_list:
items_list = items.split(':')
lock_dict[items_list[0]]=items_list[-1] #這裡注意,用-1 讀最後一行,我之前寫1 ,掉進坑裡爬不起來了。寫1,當檔案為空時,它會讀取不到這個參數就會報錯。
if username in lock_dict: #如果在close.txt檔案有這個使用者,則提示該使用者已鎖!
print("username close...")
sys.exit() #退出
else:
while count <3: #輸入次數小于三次繼續循環
password = input("Input password:") #輸入密碼
if password == dict[username]: #判斷密碼是否正确
print("Welcome user login !")
sys.exit()
else:
count +=1 #錯誤累加一次 (相當于count = count +1)
if count ==3: #寫錯三次記錄到close.txt檔案中
l=open(close_word,'a')
l.write("#%s:%s"%(username,dict[username]))
print("使用者輸錯三次被鎖定...")
sys.exit() #退出
else: #提示還有幾次機會
print('您還有%s次機會'%(3-count))
else: #使用者不存在列印
print("NO usernames...")
附帶報錯内容:
<a href="https://s4.51cto.com/oss/201711/02/f2c848760cbee0b07edaefd26e17d5b5.png-wh_500x0-wm_3-wmp_4-s_4222221847.png" target="_blank"></a>
心得體悟:
寫代碼容易,排錯難!做事要盡可能的考慮周全。走過的坑多了,自然就會熟悉。
本文轉自白羊IT51CTO部落格,原文連結:http://blog.51cto.com/000011211684/1978403,如需轉載請自行聯系原作者