要求編寫登錄接口 : 1. 輸入用戶名和密碼
2.認證成功后顯示歡迎信息
3.用戶名輸錯,提示用戶不存在,重新輸入(5次錯誤,提示嘗試次數過多,退出程序)
4.用戶名正確,密碼錯誤,提示密碼錯誤,重新輸入.(密碼錯誤3次,鎖定用戶名並提示,退出程序)
readme
應用知識點:
一,文件的操作
基本操作

1 f = open('lyrics','r',) #打開文件 2 first_line = f.readline() 3 print('first line:',first_line) #讀一行 4 data = f.read()# 讀取剩下的所有內容,文件大時不要用 5 print(data) #打印文件 6 f.close() #關閉文件
打開文件的模式有:
- r,只讀模式(默認)。
- w,只寫模式。【不可讀;不存在則創建;存在則刪除內容;】
- a,追加模式。【可讀;不存在則創建;存在則只追加內容;】
with語句 ,同時打開多個文件,還可以避免打開文件后忘記關閉,語法:

1 with open('file1', 'r', encoding='utf-8') as f , \ 2 open('file2', 'w', encoding='utf-8') as f_2 : 3 ...
本例中有2個文件,一個存用戶名和密碼,另一個存黑名單.在讀取文件后怎樣轉變成python對象,然后對對象進行操作,是我遇到的第一個難點!
然后查了下資料,發現字符串split方法,可以把字符串,從逗號分隔符的地方斷開,得到一個子字符串列表.這樣一來,就可以對黑名單進行查找等操作了.
1 ... 2 user_lis_bak = f.readline().split(',') 3 ...
Python 字典 setdefault() 函數和get()方法類似, 如果鍵不已經存在於字典中,將會添加鍵並將值設為默認值。
1 dict.setdefault(key, default=None)
二,列表和字典
列表是我們最以后最常用的數據類型之一,通過列表可以對數據實現最方便的存儲、修改等操作
1 names = ['xiaoli',"xiaoming",'yuanlu']
通過下標訪問列表中的元素,下標從0開始計數
1 >>> names[0] 2 'xiaoli' 3 >>> names[1] 4 'xiaoming' 5 >>> names[-1] 6 'yuanlu' 7 >>> names[-2] #還可以倒着取 8 'xiaoming'
字典是一種key - value 的數據類型,使用就像我們上學用的字典,通過筆划、字母來查對應頁的詳細內容。
1 info = { 2 'xiaoli': "123456", 3 'xiaoming': "111111", 4 'yuanlu': "888888", 5 }
這里key是用戶名,value是密碼,一一對應,key是唯一的.
三,for loop 和 if...else
1 for i in range(10): print(i)
還是上面的程序,但是遇到大於5的循環次數就不走了,直接退出
1 for i in range(10): 2 if i>5: 3 continue #不往下走了,直接進入下一次loop 4 print(i)
用戶名和密碼文件格式:
xiaoli 123456
xiaoming 888888
wangpeng 111111
luyuan 112222
qiling 556666
haiming 223333
黑名單文件格式:
xiaoli,xiaoming,wangpeng,
代碼

1 with open('user_lis', 'r', encoding='utf-8') as f_user_lis,\ 2 open('user_lis_bak', 'r', encoding='utf-8') as f_user_lis_bak: # 打開文件'user_lis'和'user_lis_bak' 3 user_lis_bak = f_user_lis_bak.read().split(',') # 讀取f_user_lis_bak並轉成列表賦值給 user_lis_bak 4 user_lis_dict = {} # 定義一個空字典 5 for i in f_user_lis: 6 user_lis_dict.setdefault(i.split()[0], i.split()[1]) # 讀取f_user_lis並把值放入字典user_lis_dict中 7 count = 0 8 for i in range(5): # 設置錯誤次數上限為5次 9 name = input('請輸入用戶名>>') 10 password = input('請輸入密碼>>') 11 if name in user_lis_bak: # 第一步先查找黑名單 12 print('用戶名已被鎖定,請聯系管理員!!!') 13 continue # 在黑名單中直接進入下一次循環,重新輸入用戶名和密碼 14 elif name in user_lis_dict: # 第二步查找用戶白名單 15 if password == user_lis_dict.get(name): # 密碼正確,驗證通過 退出 16 print('親愛的會員', name, '歡迎回來') 17 break 18 else: # 密碼錯誤,提示錯誤 19 if count == 2: 20 name_bak_write = open('user_lis_bak', 'a', encoding='utf-8') 21 name_bak_write.write(name+',') 22 name_bak_write.close() # 3次密碼錯誤,就把用戶名寫進黑名單 23 print('用戶名已鎖定,請聯系管理員!!!') 24 break 25 print('密碼錯誤!!!') 26 count += 1 # 密碼錯一次,count就+1 27 else: 28 if i == 4: # 用戶名錯5次,直接退出 29 print('嘗試次數過多,再見!!!') 30 continue 31 print('用戶名不存在!!!') # 用戶名錯誤,提示錯誤