新手,雖然比較簡單的東西,但是弄了我很久。
很多不完善的地方,比如鎖定用戶,同一用戶輸入錯三次密碼就會鎖定,但是如果在第二第三次換了用戶再輸入原來的用戶,則計數會重新計算。
另外不存在的用戶輸入密碼錯誤次數過多也會被鎖定,然后還能創建一個被鎖定的用戶,這個就不搞了,只要檢測一下是否存在用戶名就可以了。
暫時想到了解決辦法是在一個專用的文件里面增加一個專用的計數變量,舍棄blocklist這個文件,但是不懂怎么操作,先留著。
雖然python沒有像C一樣的main函數作為程序入口,姑且弄了一個,方便看懂
'''登陸系統要求:1、可以選擇創建新的用戶2、可以登陸原有的用戶3、輸入密碼錯誤三次后用戶則被鎖定''' flag=True #循環控制符 def createuser(): f=open('userlist.txt','r')#打開已存在用戶的文件,假設文件已經存在 flag=True name=f.readlines() f.close() while flag: username=input('username:') flag2=False#用戶名已存在的標記符 for line in name: if(username==line.split('*')[0]): flag2=True print("用戶名已存在,請重新輸入") if flag2!=True: f=open('userlist.txt','a')#創建新的用戶 f.write('/n'+username) f.write('*') password=input('password:') f.write(password) f.close() break main() def login():#登入函數,輸入密碼錯誤三次則鎖定用戶 count=0#密碼錯誤計數,3次則鎖定 f=open('userlist.txt','r') info=f.readlines() f.close() user=None#重復用戶標記符 while flag: flag2=False f2=open('blocklist.txt', 'r') block_name=f2.readlines() f2.close() username=input('username:') if user==None:#user沒有使用過,則直接賦予輸入的用戶名 user=username elif user!=username:#如果下一次輸入的用戶名不一樣,則記錄上一次的用戶名,同時計數清零 user=username count=0; for line in block_name:#檢查用戶名是否被鎖定,鎖定則返回主菜單 if username==line.strip('/n'): print('該用戶已經被鎖定,請聯系管理員') main() password=input('password:') for line in info: if(username==line.split('*')[0]and password==line.split('*')[1].strip('/n')): print('登入成功!') flag2=True if flag2==False: count+=1 print("用戶名或密碼錯誤,請重新輸入") if count==3:#錯誤三次,把用戶名添加到鎖定列表中 print('密碼錯誤次數過多,該用戶已被鎖定') f3=open('blocklist.txt','a') f3.write('/n'+username) f3.close() count=0#加入黑名單后重置計數 main()#加入黑名單后退回主菜單info='''------請輸入相關數字-----1.創建新的用戶2.登陸已有用戶3.退出程序''' def main(): print(info) while flag: i=input() if i=='1': createuser() break elif i=='2': login() break elif i=='3': exit() else: print("請輸入正確的數字.") main()#程序入口
新聞熱點
疑難解答