zoukankan      html  css  js  c++  java
  • python3 登录验证小程序,同一用户输错三次密码,锁定账户

    '''

    让用户输入用户名密码

    认证成功后显示欢迎信息
    用户3次认证失败后,退出程序,再次启动程序尝试登录时,还是锁定状态
    '''

    # !/usr/bin/env python
    # -*- coding:utf-8 -*-
    # Author:Hiuhung Wan
    
    '''
    让用户输入用户名密码
    认证成功后显示欢迎信息
    用户3次认证失败后,退出程序,再次启动程序尝试登录时,还是锁定状态
    '''
    
    dic_user_info = {
        "usera": {"pw": "123", "err_count": 0},
        "userb": {"pw": "123", "err_count": 0},
        "userc": {"pw": "123", "err_count": 0},
        "userd": {"pw": "123", "err_count": 0},
        "usere": {"pw": "123", "err_count": 0},
    }
    # 创建一个黑名单文件,这里把usera列入黑名单
    try:
        with open('blacklist.txt', 'r') as f:
            if not f.read():  # 没有内容,就写入
                with open('blacklist.txt', 'a') as f:
                    f.write("usera,")
    except FileNotFoundError as e:   # 没有这个文件,就创建并写入内容
        with open('blacklist.txt', 'a') as f:
            f.write("usera,")
    finally:
        f.close()   # 关闭文件。
    
    
    for i in range(100):
        username = input("请输入用户名(按q退出程序):")
        # 按q退出程序
        if username == 'q':
            exit()
    
        # 用户名不在字典中
        elif username not in dic_user_info:
            print("无此账户,请检查您的输入")
            continue
    
        # 用户在字典中,但被锁定
        with open('blacklist.txt', 'r') as f:
            user_locked_list = f.read().split(",")
            if username in user_locked_list:
                print("账户%s已被锁定。。。请更换另一个账户" % username)
                f.close()
                continue
            f.close()
    
        # 用户在字典中,也未被锁定,则提示输入密码
        password = input("请输入密码:")
        if password == dic_user_info[username]["pw"]:    # 密码正确
            print("欢迎【%s】登录系统。。。" % username)
            break
        else:   # 密码错
            dic_user_info[username]["err_count"] += 1  # 记录错误次数
            if dic_user_info[username]["err_count"] < 3:
                print("密码不对,您已经输错%d次密码了,输错3次账户将被锁定" % dic_user_info[username]["err_count"])
            else:   # dic_user_info[username]["err_count"] >= 3:  # 输错3次,录入黑名单数据库
                with open('blacklist.txt', 'a') as f:
                    f.write("%s," % username)
                    f.close()
                    print("输错3次密码,此账户已加入黑名单")
                    break
    

      

  • 相关阅读:
    固态硬盘和机械硬盘的比较和SQLSERVER在两种硬盘上的性能差异
    带您理解SQLSERVER是如何执行一个查询的
    SQL Server 2000中的并行处理和执行计划中的位图运算符
    SQL2005解密已经被加密的存储过程
    使用SQLServer 2008的CDC功能实现数据变更捕获
    like语句百分号前置会使用到索引吗?
    再说一下表分区
    SQLSERVER中的元数据锁
    验证非法电话号码
    OpenCV 2.2版本号以上显示图片到 MFC 的 Picture Control 控件中
  • 原文地址:https://www.cnblogs.com/hiuhungwan/p/9278666.html
Copyright © 2011-2022 走看看