道路のPythonの百万年俸 - 第二週 - 立方アカウントのログインロック機能

3つのユーザログインおよびコード付き(行うための勧告にするために、多くの時間を行うに選出された)ロックを達成
プロジェクトの分析を:
最初のプログラムが起動し、それは以下の内容が表示され、ユーザーが選択するために:
1.登録
2.ログイン

ユーザが最初のユーザ名が存在しない存在を判定、ログインを選択した場合USERINFO.TXTテーブルに登録することができない
、B。登録されたユーザ名がユーザ名とパスワードに存在しない場合は、ファイルUSERINFO.TXTのに書き込まれる
Cユーザーは、時間を記録することを選択し、ユーザー入力口座番号とパスワードUSERINFO.TXT格納するかどうかを全会一致で決定
D。サイクルの終了時にユーザー名とパスワードの契約、および成功にログオンするユーザーに要求します!
E.一貫性のないユーザー名とパスワード、たった3つのログイン機会、3回プロンプトユーザー名がロックされた後、管理者に連絡して!とサイクル終了
Fを。ユーザー名出力三回は、再度プログラムを実行します。ログインのロックアウトは、アカウントのユーザー名がロックされているプロンプトを表示し続けたときに、管理者に連絡してください!

import os
count = 0
dic = {}
def locked(login_user,count = 3):
    with open("userinfo.txt", "r", encoding="UTF-8") as f4, open("userinfo_bak.txt", "w", encoding="UTF-8") as f5:
        for i in f4:
            i = i.strip().split(":")
            if i[0] == login_user:
                i[0] = i[0].replace(i[0], i[0] + "$")
            f5.write(f"{i[0]}:{i[1]}\n")
    # print(f"你输错了{count}次!")
    print(f"检测到用户名{login_user}已经输错了{count}次,已锁定!请联系管理员!")
    os.remove("userinfo.txt")
    os.rename("userinfo_bak.txt", "userinfo.txt")
def user_login_count(login_user):
    with open("userinfo.txt", "r", encoding="UTF-8") as f:
        for i in f:
            i = i.strip().split(":")
            if i[0][-1] == "$" and i[0][0:-1] == login_user:
                dic[login_user] = 3
    if dic.get(login_user,0) != 3:
        dic[login_user] = dic.get(login_user,0) + 1
    # print(dic[login_user])
    return dic[login_user]
def register():
    user = input("请输入注册用户名(退出程序请按q/Q):")
    if user.lower() == "q":
        return "q"
    while 1:
        pwd = input("请输入注册密码:")
        if not pwd.strip():
            print("注册密码不能为空!请重新输入!")
        else:
            break
    with open("userinfo.txt", "r", encoding="UTF-8") as f:
        flag = True
        for i in f:
            i = i.split(":")
            if user == i[0]:
                print("用户名已存在!")
                flag = False
        if flag == True:
            with open("userinfo.txt", "a", encoding="UTF-8") as f1:
                f1.write(user + ":" + pwd + "\n")
                print("注册成功!")
def login():
    flag = False
    while 1:
        login_user = input("请输入登录用户名(退出程序请按q/Q):")
        if login_user.lower() == "q":
            return "q"
        login_pwd = input("请输入登录密码:")
        with open("userinfo.txt","r",encoding="UTF-8") as f:
            for i in f:
                i = i.strip().split(":")
                if i[0][-1] == "$" and i[0][0:-1] == login_user:
                    print(f"用户名{login_user}已被锁!")
                    break
                elif i[0] == login_user and i[1] == login_pwd:
                    flag = True
                    break
        if flag != True:
            ret = user_login_count(login_user)
            if ret == 3:
                locked(login_user)
            else:
                print(f"登陆失败,你已经输错{ret}次了!")
        else:
            print("登陆成功!")
            dic[login_user] = 0
            break
while 1:
    inp = input("请输入序号(1/注册,2/登录,q或Q/退出程序):")
    if inp == "1" or inp == "2" or inp.lower() == "q":
        if inp == "1":
            if register() == "q":
                break
        elif inp == "2":
            if login() == "q":
                break
        elif inp.lower() == "q":
            print("已退出程序!")
            break
    else:
        print("请重新输入!")

おすすめ

転載: www.cnblogs.com/zhangchaoyin/p/11221197.html