初學 python 之 用戶登錄實現過程


要求編寫登錄接口 : 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() #關閉文件
View Code

打開文件的模式有:

  • 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        ...
View Code   

本例中有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('用戶名不存在!!!')                   # 用戶名錯誤,提示錯誤
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM