python用戶登錄,密碼錯誤3次則鎖定


需求:

  1.輸入用戶名密碼

  2.認證成功后顯示歡迎信息

  3.輸錯三次后鎖定

實現思路:

  1.判斷用戶是否在黑名單,如果在黑名單提示賬號鎖定。

  2.判斷用戶是否存在,如果不存在提示賬號不存在。

  3.判斷賬號密碼是否正確,如果正確登錄進去。如果不正確有三次輸入密碼機會。三次全部輸錯,賬號鎖定。

 方法一:(簡易版本)

count = 0
username = "xuyuanyuan"
password = "123"

with open("file.txt",mode="r",encoding="utf8") as f:
    file_list=f.readlines()
name=input("請輸入用戶名:")
#判斷輸入用戶名是否在黑名單中
if name in file_list:#如果用戶名在黑名單內
    print("您的賬戶已鎖定,請聯系管理員!")
else:
    #判斷用戶名是否存在
    if name == username:
        while count < 3:
            pwd = input("請輸入您的密碼:")
            if pwd == password:
                print("welcome %s" %name)
                break
            else:
                print("password is error!")
                count+=1
        else:#如果用戶名輸入錯誤超過三次的話,就將用戶名加入到黑名單file.txt文件里
            print("您輸入的次數已經超過三次,賬號已鎖定,請聯系管理員!")
            with open("file.txt", mode="a+", encoding="utf8") as f:
                test=("%s"%name)
                f.writelines(test)

    else:
        print("該用戶名不存在,請重新輸入!")

 方法二:

 

# 獲取注冊用戶的信息
with open("db", "r", encoding="UTF-8") as f:
    # users = f.readlines()  # 讀成列表
    # users = f.read()  # 讀到內存
    users = {}
    for line in f:
        user_list = line.strip().split("|") # 分割得到列表
        # print(user_list)
        users[user_list[0]] = {#往字典里加內容
            "username": user_list[0],
            "passwd": user_list[1],
            "times": user_list[2],
        }
        # print(users)

# # 讀取黑名單
black_list = []
with open("blacklist.txt", "r", encoding="UTF-8") as f2:
    for line in f2:
        black_list.append(line.strip())
        # print(black_list)
#
while True:
    # 獲取用戶輸入
    username = input("用戶名:").strip()
    passwd = input("密碼:").strip()

    # 判斷是不是黑名單用戶
    if username in black_list:
        print("用戶名已被鎖定,請聯系管理員!")
        # 把用戶信息再寫回文件
        with open("db", "w", encoding="UTF-8") as f4:
            for j in users:#遍歷的是字典里的key
                f4.write(users[j]["username"] + "|" + users[j]["passwd"] + "|" + str(
                    users[j]["times"]) + "\n")
                # 字典是無序的
                # f4.write("|".join([lambda x: str(x) for x in users[j].values()])+ "\n")
        break

    # 判斷用戶名存不存在
    elif username in users:
        if passwd == users[username]["passwd"]:
            print("登錄成功")
            # 把之前的錯誤次數清空
            users[username]["times"] = 0
            # 把用戶信息再寫回文件
            with open("db", "w", encoding="UTF-8") as f4:
                for j in users:
                    # users[j]是每個用戶的字典
                    f4.write(users[j]["username"] + "|" + users[j]["passwd"] + "|" + str(users[j]["times"]) + "\n")
            break
        else:
            print("用戶名密碼錯誤")
            # 判斷輸錯次數
            users[username]["times"] = int(users[username]["times"])  # 轉成int類型
            users[username]["times"] += 1
            if users[username]["times"] >= 3:
                print("用戶名被鎖定啦!")
                # 加入黑名單
                black_list.append(username)
                with open("blacklist.txt", "w") as f3:
                    for i in black_list:
                        f3.write(i+"\n")
                # 把用戶信息再寫回文件
                with open("db", "w", encoding="UTF-8") as f4:
                    for j in users:
                        # users[j]是每個用戶的字典
                        f4.write(users[j]["username"] + "|" + users[j]["passwd"] + "|" + str(
                            users[j]["times"]) + "\n")

                break
    else:
        print("用戶名不存在")

 

  

 


免責聲明!

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



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