1. 程式人生 > 實用技巧 >1.python之編寫登陸介面

1.python之編寫登陸介面

作業:編寫登陸介面

    • 輸入使用者名稱密碼
    • 認證成功後顯示歡迎資訊
    • 輸錯三次後鎖定



def islocked(username):        #驗證帳號是否被鎖定
    with open("lock.txt",'r') as f:     #開啟lock.txt檔案
        users = []                      #定義一個空列表,用於儲存所有的帳號
        lines = f.readlines()           #讀取檔案資訊,放入列表易於操作
        for line in lines:
            users.append(line.strip().split(':')[0])    #依次讀取列表中的元素,按:切片,追加到users列表
        if username in users:           #如果帳號存在users列表中,提示帳號已被鎖定
            print("你輸入的帳號%s已被鎖定,請聯絡管理員"%username)
        else:                           #如果帳號不存在users列表中,則呼叫isregister函式,確認是否註冊
            isregister(username)

def isregister(username):               #驗證帳號是否註冊
    with open("user.txt",'r') as e:
        register_user = []
        user_lines = e.readlines()
        for user_line in user_lines:
            register_user.append(user_line.strip().split(':')[0])
        if username in register_user:
            print("正在登入,請稍候...")
        else:
            print("Sorry %s還沒有註冊,請註冊之後登入"%username)
            message = input("你想註冊一個帳號(%s)嗎?『yes|no:"%username)
            if message =='yes':
                register(username)
            else:
                sys.exit()
def register(username):             #註冊帳號
    _password = input("註冊帳號:%s,請輸入你的註冊密碼:"%username)
    with open("user.txt",'a') as p:
        info = f"{username}:{_password}\n"
        p.writelines(info)
    print("註冊完成%s"%username)

def userpassword(username):     #輸入密碼,返回給呼叫函式
    print("你要登入的帳號為:%s"%username)
    _password=input("請輸入你的密碼:")
    return _password

def login(username):        #使用者登入函式
    islocked(username)
    i=0
    with open("user.txt",'r') as o:
        dic = {}
        user_lines = o.readlines()
        for user_line in user_lines:
            (user, passwd) = user_line.strip().split(":")
            dic[user] = passwd
        while i <3:
            _password = userpassword(username)
            if dic[username] == _password:
                print("Hell,%s歡迎回來"%username)
                break
            else:
                i += 1      #密碼失敗一次,+1,失敗3次呼叫鎖定函式
                if i ==3:
                    add_locked_user(username)
                    print("對不起,你輸入的次數太多,使用者名稱已被鎖定,請聯絡管理員")
                    break

def add_locked_user(username):      #鎖定函式
    with open("user.txt",'r') as x:
        lines = x.readlines()
        _user = []
        for line in lines:
            _user.append(line.strip().split(":")[0])
        num = _user.index(username)     #根據帳號找到鎖定帳號的位置
    with open ("lock.txt",'a') as a:
        a.write("%s\n" %lines[num])     #將鎖定帳號資訊追加到lock.txt檔案
    with open("user.txt",'w') as w:     #開啟user.txt檔案,
        del lines[num]                  #將鎖定帳號刪除
        w.writelines(lines)             #將其餘帳號資訊覆蓋寫入user.txt

login(username=input("請輸入你要登入的帳號:"))


 user.txt

jack:123456
lily:abc123
cici:xyz123



lock.txt

jjjj:12345
iiii:123455
oppo:111111