python--用戶登錄驗證


目標要求:

1、最多輸入3次用戶名密碼,

2、如果是被鎖用戶,則一次即退出程序,

3、如果輸入正確的用戶名密碼,則提示登陸成功,程序結束,

4、3次輸入不對,會將用戶寫入被鎖用戶列表,當然,該用戶名需要是在注冊用戶列表中的。

實現用到的知識:

1、函數定義,將驗證用戶是否是被鎖用戶、用戶名密碼是否匹配、以及將用戶加入被鎖列表定義為3個獨立函數

2、文件打開讀寫,以讀r、追加a方式打開,然后用readline和readlines兩種方式讀取,並對取出的字符串進行strip和split處理,再比對,用write寫入,最后記得close

碰到的問題:

1、中文文件讀取亂碼的問題   

  首先建立的utf-8編碼的txt文件,輸入了中文內容,采用的python3,一開始使用open(文件名,"r")來打開文件讀取,出現亂碼問題。按理說python3默認unicode,txt文件也是utf-8保存的,用的pycharm編輯工具進行了utf-8 coding的設置,各處都是一致的,沒道理讀出來是亂碼。后來在pycharm工具中打開了txt文件,卻發現該文件是ascii碼,於是另存為。。。考慮到txt文件可能不會特別注意到coding方式,所以在open中顯式指定encoding,問題解決。

2、該程序沒能解決一種登陸情況

  程序原本的要求,用戶輸入3次,錯誤的話,就鎖用戶。一般情況,大家只知道自己的用戶名,只會對自己的一個用戶名進行登陸操作,那么輸錯3次,該用戶名被鎖,ok,正常。另一種情況,3次輸入的是不同的用戶名(可能用戶沒記住注冊的是哪個名字),那么3次輸錯后,只能鎖定最后一次輸入的用戶名,而該用戶名可能只被嘗試輸錯了一次。

 1 import getpass
 2 import os
 3 print("***此程序用於驗證用戶登錄。***")
 4 print("***用戶最多可輸入3次用戶名和密碼。***")
 5 print("***輸入正確,有提示,不用輸滿3次,同一個用戶名輸入錯誤3次,會被鎖***\n\n")
 6 
 7 def checklock(name,lockfile):
 8     fd=open(lockfile,'r',encoding="utf-8")
 9     lockusername = fd.readlines()
10     maxidx = len(lockusername) - 1
11     i = 0
12     while i <= maxidx:
13         if name == lockusername[i].strip("\n"):
14             print("用戶被鎖,請聯系管理員")
15             fd.close()
16             return True
17         i+=1
18     fd.close()
19     return False
20 
21 def checkmatch(name,password,userfile):
22     fd=open(userfile,'r',encoding="utf-8")
23     line=fd.readline()
24     while line:
25         linedate = line.strip("\n").split(" ")
26         line=fd.readline()
27         if name == linedate[0] and password == linedate[1]:
28             print("用戶名密碼正確,登陸成功。")
29             fd.close()
30             return True
31     print("用戶名密碼不正確。")
32     fd.close()
33     return False
34 
35 def addlockuser(name,userfile,userlockfile):
36     fd1=open(userfile,"r",encoding="utf-8")
37     fd2=open(userlockfile, "a", encoding="utf-8")
38     line=fd1.readline()
39     while line:
40         linedate=line.split(" ")
41         line=fd1.readline()
42         if name==linedate[0]:
43             fd2.write(name+"\n")
44             print(name+"被加入被鎖用戶列表")
45             return
46     fd1.close()
47     fd2.close()
48 
49 trynum=1
50 while trynum<=3:
51     #獲得用戶輸入的用戶名和密碼
52     print(""+str(trynum)+"次輸入。\n")
53     trynum +=1
54     name=input("Username: ")
55     password=input("Password: ")
56     #password=getpass.getpass("Password: ") #需要在cmd的python解釋器下運行,pycharm不能模擬
57 
58     #判斷輸入的用戶名是否在被鎖用戶列表中
59     if checklock(name,"lockuser.txt"):
60         exit()
61     #判斷是否和存儲的用戶名密碼匹配
62     elif checkmatch(name,password,"user.txt"):
63         exit()
64     elif trynum==4:
65     #3次輸入不對,加入被鎖用戶文件
66         addlockuser(name,"user.txt","lockuser.txt")
67         exit()

 


免責聲明!

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



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