zoukankan      html  css  js  c++  java
  • 连续三次登陆失败锁定账户

    连续三次登录失败锁定账户

    需求说明:
    1、输入用户名
    2、认证成功,提示登录成功,欢迎信息
    3、登录失败连续三次,提示失败,并退出程序

    备注:
    1、users_info是存放用户名及其密码的文件,格式: 用户名 密码, 之间用空格隔开
    2、locked_file是存放被锁定的用户id的文件,默认为空,格式为: 用户名
    3、程序会对users_info里的合法用户id进行判断,若连续三次输入错误,提示失败并退出
    4、程序会对正确的用户名后的密码进行验证,输入三次密码错误,锁定该用户名,并退出

    思路导图:



    一、代码如下
    #!/usr/bin/env python3
    # -*- coding:utf-8 -*-
    # Author: davie
    # file three_login.py
    """
    需求说明:
    1、输入用户名
    2、认证成功,提示登录成功,欢迎信息
    3、登录失败连续三次,提示失败,并退出程序
    
    备注:
    1、users_info是存放用户名及其密码的文件,格式: 用户名 密码, 之间用空格隔开
    2、locked_file是存放被锁定的用户id的文件,默认为空,格式为: 用户名
    3、程序会对users_info里的合法用户id进行判断,若连续三次输入错误,提示失败并退出
    4、程序会对正确的用户名后的密码进行验证,输入三次密码错误,锁定该用户名,并退出
    """
    import os,sys,getpass   # 导入os,sys,getpass 模块
    os.system('clear')      # 清屏操作
    count = 0               # 用户输入循环次数
    while count < 3:        # 只要用户登录失败不超过3次,就就行循环执行
        username = input("请输入您的用户名: ").strip()   # 输入用户名
        # 打开locked_file文件,权限是读写,并赋值给locked_f变量
        locked_f = open('locked_file',mode='r+',encoding='utf-8')
        # 使用.readlines()的方法逐行读取locked_file文件,并赋值给locked_list变量
        locked_list = locked_f.readlines()
    
        # 使用for循环读取locked_file的内容
        for locked_line in locked_list:
            # 使用.strip()的方法去掉换行符
            locked_line = locked_line.strip('
    ')
            # 判断用户输入的信息是否在locked_file中存在
            if username == locked_line:
                print("用户:33[31m%s33[0m 已经锁定,请联系您的管理员" % username) # 如果存在则打印
                sys.exit(1) # sys模块的exit()方法表示退出
        with open("users_info",mode="r",encoding="utf-8") as user_f: # 只读模式打开文件
            user_list = user_f.readlines()  # 使用.readlines()方法逐行读取,赋值给变量
            
        for user_line in user_list: # 使用for循环读取users_info的内容
            (user,passwd) = user_line.strip('
    ').split()   # 分别获取账号和密码信息
            if username == user:    # 使用if判断用户输入的账号是否在users_info中存在
                p_count = 0               # 输入密码的循环次数
                while p_count <3:         # 循环不超过三次
                    password = getpass.getpass("请输入密码: ")  # 使用getpass方法,密码不显示
                    if password == passwd:  # 用户名和密码都正确
                        print("33[36m欢迎您,登陆成功!33[0m")
                        sys.exit(0)
                    else:
                        if p_count != 2:  # p=2时,是最后一次机会
                            print("对不起,33[31m%s33[0m的密码错误,请继续输入,你还有33[31m%d33[0m次机会"%(username,2-p_count))
                    p_count += 1
            else:
                pass    # 用户匹配失败,跳过并继续循环
        else:
            locked_f.write(username + '
    ')
            sys.exit("对不起 33[31m%s 用户已经被锁定,请联系管理员33[0m"% username)
        u += 1
    else:
        sys.exit("33[31输入有误,程序退出,请重新输入!33[0m")
    locked_f.close()      # 关闭文件
    View Code

      二、运行结果

    [davie@webserver ~]$ ll
    total 8
    -rw-rw-r-- 1 davie davie    0 Mar 23 20:54 locked_file
    -rw-rw-r-- 1 davie davie 3312 Mar 23 20:53 three_login.py
    -rw-rw-r-- 1 davie davie   30 Mar 23 20:24 users_info
    [davie@webserver ~]$ cat users_info 
    u1 123456
    u4 123456
    u5 123456
    [davie@webserver ~]$ python3 three_login.py 
    请输入您的用户名: u1
    请输入密码: 
    对不起,u1的密码错误,请继续输入,你还有2次机会
    请输入密码: 
    对不起,u1的密码错误,请继续输入,你还有1次机会
    请输入密码: 
    对不起 u1 用户已经被锁定,请联系管理员
    [davie@webserver ~]$ 
    [davie@webserver ~]$ cat locked_file 
    u1
    [davie@webserver ~]$ 
    [davie@webserver ~]$ python3 three_login.py 
    请输入您的用户名: u2
    对不起 u2 用户已经被锁定,请联系管理员
    [davie@webserver ~]$ ll
    total 12
    -rw-rw-r-- 1 davie davie    6 Mar 23 21:42 locked_file
    -rw-rw-r-- 1 davie davie 3312 Mar 23 20:53 three_login.py
    -rw-rw-r-- 1 davie davie   30 Mar 23 20:24 users_info
    [davie@webserver ~]$ cat locked_file 
    u1
    u2
    [davie@webserver ~]$ python3 three_login.py 
    请输入您的用户名: u3
    对不起 u3 用户已经被锁定,请联系管理员
    [davie@webserver ~]$ python3 three_login.py 
    请输入您的用户名: u4
    请输入密码: 
    欢迎您,登陆成功!
    [davie@webserver ~]$ 
    View Code


  • 相关阅读:
    关于JDK和eclipse的安装和汉化
    关于Android SDK Manager更新速度慢的解决方法
    Navicat Premium 11破解补丁下载及安装方法
    win8.1下无法运行vc++6.0的解决方法
    在Editplus中配置java的(带包)编译(javac)和运行(java)的方法
    关于在Editplus中设置内容提示比如syso的快捷输出的方法
    关于win8/win8.1系统不能调节亮度的解决办法
    JDK的安装和Java环境变量配置
    关于classpath
    Genymotion模拟器的安装及常见问题解决方法
  • 原文地址:https://www.cnblogs.com/bjx2020/p/8635196.html
Copyright © 2011-2022 走看看