要求:
输入用户名,密码
认证成功显示欢迎信息
输入错误三次后锁定用户
Readme:
  1.account.txt是存放用户id及密码的文件

  2.account_loc.txt是存放被锁定的用户id的文档,默认为空.

  3.程序会对account.txt里的合法用户id进行判断,若连续输入用户id错误达三次程序直接退出.

  4.程序会输入对正确用户名后的密码进行判断,输入密码有3次机会,连续三次错误则会锁定用户id并且退出.

流程图:

 

代码实现:

版本1:输入写死的用户名密码

#写死了用户名密码,输入错误三次退出,或者成功登陆
user = "Amy"
passwd="
i=0

while i < 3:
    name = input("Please in put username:\n")  #写入用户名
    key = input("Please input password:\n") #写入用户密码
    if name == user and passwd == key:  #判断用户名和用户密码是否和预期一致
        print("Welcome!")  #如果一致,返回欢迎界面,登陆成功!
        break #退出所有循环,如果没有这个就是退出单层循环,会返回输入用户名这个
    else:
        i = i + 1    #如果用户名或者密码不一致,计数器加一
        if i<3:      #如果计数器小于3,就是说等于1,或者2次输入错误,返回重新输入
            print("Error username or password,Please input again!\n")
        else:
            print("Too many times error !")

最终版本:加入文件读写

 i=0
 while i<3: #设置如果输入三个用户名都无法登录成功,算尝试过多,失败退出
     user = input("请输入用户名:")
     i=i+1  #对用户名输入次数做限制
     lock_file=open("account_lock.txt","r+")#打开记录锁定用户名的文件,查看该用户是否被锁定,如果是,退出,不是进入下一步
     lock_list = lock_file.readlines()   #按照list循环读取锁定用户名的文件
     for lock_line in lock_list:   #循环读取锁定用户名的文件内容
         lock_line=lock_line.strip("\n")#去掉换行符
         if user in lock_line:#判断用户输入用户名存在锁定用户名的文件中
             print("用户 %s 已经被锁定,退出" % user)
             exit()#退出
             # lock_file.close()
     f=open("account.txt","r+") #打开存放用户名密码的文件(已存在的)
     account_list=f.readlines()   #对用户名密码文件进行遍历
     for user_line in account_list:
         (username,password)=user_line.strip('\n').split(" ")#获取用户名、密码列表
         if user == username:#判断用户输入用户名是否在文件中存在,是进行下一步
             # print(username,password)
             j=0#设置计数器,对密码输入次数做限制
             while j <3:#输入密码次数小于三次就进行循环
                 key =input("请输入用户密码:")#输入密码
                 if key == password:
                     print("恭喜你,用户%s 登陆成功!" %user)  #密码正确,提示欢迎登录
                     exit()#退出程序
                 else:#密码输入错误的提示
                     if j<2:#如果密码输入第一次错误,第二次错误,提示还有n-1次机会并且回到内循环头,重新输入密码
                         print("用户 %s 密码输入错误,您还有%s 次机会,请重新输入:"%(user,2-j))
                 j =j+1 #密码输入次数计数器
             else:#同一用户,输入错误密码达到三次
                 lock_file.write(user +"\n")#将用户名写入锁定文件,并提示
                 print("用户 %s 达到最大登录次数,将被锁定并退出"%user)
                 exit()#退出登陆程序
         else:#当用户没有匹配,继续循环,找,直到遍历account_list
             pass
     else:#用户名和密码不存在用户密码文件,显示提示,用户不存在
         print("用户 %s 不存在,请重新输入"%user)
 else:#i>=3,输入三次错误用户
     print("尝试次数过多,退出登陆!")
 lock_file.close()#关闭锁定用户文件
 f.close()#关闭用户名密码文件

 结果演示:

1、三次错误用户名:

2、三次错误密码:

3、锁定用户:

[Python3.x]多次登陆锁定用户的更多相关文章

  1. Python作业之三次登陆锁定用户

    作业之三次登陆锁定用户 作业要求如下: 1. 输入用户名和密码 2. 认证成功提示欢迎信息 3. 认证失败三次锁定用户 具体代码如下: 方法1: import os#导入os模块 if os.path ...

  2. Centos 用户登录失败N次后锁定用户禁止登陆

    针对linux上的用户,如果用户连续3次登录失败,就锁定该用户,几分钟后该用户再自动解锁 Linux有一个pam_tally2.so的PAM模块,来限定用户的登录失败次数,如果次数达到设置的阈值,则锁 ...

  3. Centos7下用户登录失败N次后锁定用户禁止登陆的方法

    前言 针对linux上的用户,如果用户连续3次登录失败,就锁定该用户,几分钟后该用户再自动解锁.Linux有一个pam_tally2.so的PAM模块,来限定用户的登录失败次数,如果次数达到设置的阈值 ...

  4. python 3.5 用户登录验证和输入三次密码锁定用户

    #!/usr/bin/env python #encoding: utf-8 #登录程序,输入用户和密码输出欢迎信息,输入错误三次锁定用户,不让登录 import sys print (''' 欢迎登 ...

  5. RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2-新增锁定用户与解除锁定用户的功能

    锁定用户功能在现实应用场景中得到了大量的应用,当我们需要限制某用户的登录,又不能删除这个用户时就可以使用锁定功能,如:未授权的用户尝试错误密码错误过多可以尝试的用户进行锁定,又如ATM机上取钱时密码错 ...

  6. linux尝试登录失败后锁定用户账户的两种方法

    linux尝试登录失败后锁定用户账户的两种方法 更新时间:2017年06月23日 08:44:31   作者:Carey    我要评论   这篇文章主要给大家分享了linux尝试登录失败后锁定用户账 ...

  7. 转:通过ASP.Net页面获取域用户名(当前登陆的用户)

    通过ASP.Net页面获取域用户名(当前登陆的用户) 原文地址: https://www.cnblogs.com/fast-michael/archive/2011/03/14/2057954.htm ...

  8. Linux vfpd锁定用户目录

    在linux ftp配置中,为了防止用户cd 到其他目录,需要锁定用户的根目录. Step1:修改配置文件 [root@ess ~]# vi /etc/vsftpd/vsftpd.conf #chro ...

  9. struts2使用拦截器完成登陆显示用户信息操作和Struts2的国际化

    其实学习框架,就是为了可以很好的很快的完成我们的需求,而学习struts2只是为了替代之前用的servlet这一层,框架使开发更加简单,所以作为一个小菜鸟,特别感谢那些超级无敌变态开发的框架供我们使用 ...

随机推荐

  1. System IPC 与Posix IPC(msg消息对列)

    系统消息队列: 一.消息队列基本概念 系统V消息队列是随内核持续的,只有在内核重起或者显示删除一个消息队列时,该消息队列才会真正被删除.因此系统中记录消息队列的数据结构(struct ipc_ids ...

  2. 显示锁(ReentranLock)

    1. Lock接口:定义了一组抽象的加锁操作,提供了一种无条件的.可轮询的.定时的以及可中断的锁获取操作,所有的加锁和解锁的方法都是显示的. 2. ReentrantLock锁:实现了Lock接口,并 ...

  3. Java虚拟机2:Java内存区域

    1.几个计算机的概念 为以后写文章考虑,也为巩固自己的知识和一些基本概念,这里要理清楚几个计算机中的概念. 1.计算机存储单位 从小到大依次为位Bit.字节Byte.千字节KB.兆M.千兆GB.TB, ...

  4. nrf52832协议栈S132特性记录

    1. NRF52832带蓝牙协议栈的程序是如何跳转的? 答:如果NRF52832烧录了协议栈S132和用户应用程序,那么程序会先从协议栈的MBR启动,然后跳转到应用程序执行. 2. 关于中断的执行是怎 ...

  5. MSF入侵安卓手机

    MSF是Metasploit的简称,Metasploit是一款开源的安全漏洞检测工具,非常强大,分别有Windows版和Linux版,工具里集成了许多微软公布的漏洞(0day). 我这里做测试的系统是 ...

  6. Fidder学习基础(二)

    一. 巧用代理抓包. 首页,需设置Tools——>Fiddler Options——>Connectons,维护代理端口及允许其他设备连接. 这里,需要注意的是端口配置不能重复,抓包代理设 ...

  7. maven学习利用Profile构建不同环境的部署包

    项目开发好以后,通常要在多个环境部署,象我们公司多达5种环境:本机环境(local).(开发小组内自测的)开发环境(dev).(提供给测试团队的)测试环境(test).预发布环境(pre).正式生产环 ...

  8. java三大特性(封装、继承、多态)

    oop(面向对象程序设计)具有三大特性:封装.继承.多态 一.封装 封装就是讲类的信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类的实现隐藏信息的操作和访问. 实现封装 1.需要修改属性的访问 ...

  9. 修改office文档修改日期

    修改“创建日期”可采用如下方法: 首先把系统日期调整到您所希望的时间,然后到MS-DOS方式下,对该文件输入如下命令:COPY /B filename +,, (一个加号.两个逗号),当询问您是否确认 ...

  10. Gradle Goodness: Changing Name of Default Build File

    Gradle uses the name build.gradle as the default name for a build file. If we write our build code i ...