1. 程式人生 > >初學Python寫一個簡單的登陸系統

初學Python寫一個簡單的登陸系統

新手,雖然比較簡單的東西,但是弄了我很久

很多不完善的地方,比如鎖定使用者,同一使用者輸入錯三次密碼就會鎖定,但是如果在第二第三次換了使用者再輸入原來的使用者,則計數會重新計算

另外不存在的使用者輸入密碼錯誤次數過多也會被鎖定,然後還能建立一個被鎖定的使用者,這個就不搞了,只要檢測一下是否存在使用者名稱就可以了

暫時想到了解決辦法是在一個專用的檔案裡面增加一個專用的計數變數,捨棄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()#程式入口