要求:用户输入用户名和密码错误三次,就对该用户进行锁定,不让其进行登录。

def match(name,pwd):
'''匹配用户输入的信息,进行判断'''
falg = True
while falg:
with open("test",mode="r",encoding="utf8") as f_read,\
open("test2",mode="r",encoding="utf8") as f1_read:
fread = f_read.readlines()
f1read = f1_read.readlines()
for lines in f1read:#循环黑名单里的内容
if name == lines:#判断是否在黑名单里,在就锁定退出
falg = False#退出while循环
print("This user has been locked!")
if falg ==False:
break #退出黑名单循环
for line in fread:#循环用户信息库,进行判断是否正确
if name in line and pwd in line :
verdict = True#输入正确为True,退出循环
break
else:
verdict = False#输入错误为False,跳出本次循环
continue
if verdict == True:#因为用户信息库里有很多用户信息,so,要拿出来判断
print("welcome %s" % (name))
falg = False
if verdict == False:
print("You input the username or password error")
decide(name)#当输入错误时,调用decide函数
falg = False def decide(name):
'''写入用户输入错误的用户名,达到一定的次数,把该用户写入黑名单'''
count = 0#计数器,用于记录输入错误用户的次数
with open("test1",mode="a+",encoding="utf8") as f_add:
f_add.write("\n"+name)#往文本写错误用户的信息
f_add.seek(0)#把光标移到最开始位置
fadd = f_add.readlines()#获取输入错误用户的信息
for i in range(len(fadd)):#循环列表fadd
fadd[i] = fadd[i].replace('\n', '')#去掉每行中的“\n”,用于下面的比对
for line in fadd:#此时的fadd里已没有多余的空格,便于比对
if name == line:#当有重复的用户名,累加一次
count += 1 #匹配后自加1
if count > 2:#当输入3次时,就调用black函数
black(name) def black(name):
'''黑名单,输入达到次数的用户,被锁定在黑名单'''
with open("test2",mode="a+",encoding="utf8") as f_add:
f_add.seek(0)#移动光标至最开始位置
fadd = f_add.readlines()#获取黑名单信息
for line in fadd:#循环黑名单,有重复的用户不会被写入
if name == line :
break #有重复的信息退出,不再写入黑名单
f_add.write("\n"+name)#写入黑名单 while True: #用户交互模式
name = input("Please input your username:").strip()
if len(name) == 0:#判断用户名输入是否为空,空的话重新输入
print("Input is wrong, please input again")
continue
if name =="q":#输入q退出
print("ByeBye!")
break
pwd = input("Please input your password:").strip()
match(name, pwd)#调用match函数,匹配输入信息

  程序中test为用户的信息库:

michael---111
egon---222
tom---333

  test1:为缓存错误用户的信息,对错误用户进行计数。

  test2:为存储达到规定次数的用户信息,就是黑名单。使在名单里的用户无法完成登录操作。

  

Python实战一的更多相关文章

  1. Python 实战一

    列表ID的显示 起初ID显示的是数据库中的id,因为数据库中的id是自增长的,所以删除一条后,这里显示就叉开了,这里使用索引的方式来显示. 这个功能实现的逻辑: 第一:定义一个表格的架构,用id=‘i ...

  2. 机器学习实战一:kNN手写识别系统

    实战一:kNN手写识别系统 本文将一步步地构造使用K-近邻分类器的手写识别系统.由于能力有限,这里构造的系统只能识别0-9.需要识别的数字已经使用图形处理软件,处理成具有相同的色彩和大小:32像素*3 ...

  3. 【转】Delphi+Halcon实战一:两行代码识别QR二维码

    Delphi+Halcon实战一:两行代码识别QR二维码 感谢网友:绝代双椒( QQ号应原作者要求隐藏了:xxxx6348)的支持 本文是绝代双椒的作品,因为最近在忙zw量化培训,和ziwang.co ...

  4. C蛮的全栈之路-node篇(二) 实战一:自动发博客

    目录 C蛮的全栈之路-序章 技术栈选择与全栈工程师C蛮的全栈之路-node篇(一) 环境布置C蛮的全栈之路-node篇(二) 实战一:自动发博客 ---------------- 我是分割线 ---- ...

  5. 【实战】Docker 入门实战一:ubuntu 和 centos 安装Docker

    Docker是什么 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源.Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布 ...

  6. zookeeper curator ( 实战一)

    目录 zookeeper 的伪集群搭建 写在前面 1.1. zookeeper 安装&配置 1.1.1. 创建数据目录和日志目录: 1.1.2. 创建myid文件 1.1.3. 创建和修改配置 ...

  7. Netty聊天器(实战一):从0开始实战100w级流量应用

    Java 聊天程序(百万级流量实战一):系统介绍 疯狂创客圈 Java 分布式聊天室[ 亿级流量]实战系列之14 [博客园 总入口 ] 源码IDEA工程获取链接:Java 聊天室 实战 源码 写在前面 ...

  8. 【k8s实战一】Jenkins 部署应用到 Kubernetes

    [k8s实战一]Jenkins 部署应用到 Kubernetes 01 本文主旨 目标是演示整个Jenkins从源码构建镜像到部署镜像到Kubernetes集群过程. 为了简化流程与容易重现文中效果, ...

  9. miniFTP项目实战一

    项目简介: 在Linux环境下用C语言开发的Vsftpd的简化版本,拥有部分Vsftpd功能和相同的FTP协议,系统的主要架构采用多进程模型,每当有一个新的客户连接到达,主进程就会派生出一个ftp服务 ...

随机推荐

  1. 事件对象event

    每个事件都有默认事件event对象 e.target 事件目标对象 e.keycode 键码 e.stopPropogation();//阻止默认事件

  2. Excel根据字符串截取单元格部分内容

    我第一列的数据是这样的 我需要 1.将“projectId=”后面的数字放到第二列, 以及 2.将”mediumId=”后面的数字放到第三列 针对1使用函数:=MID(A2,FIND("pr ...

  3. java导出csv文件使用Excel打开乱码问题

    写一个csv文件,发现使用 notpad++ 打开是没有问题的,但是使用 Excel 打开之后显示乱码 刚开始的代码是这样子的: ByteArrayOutputStream os = new Byte ...

  4. 【tmos】使用joda-time来个格式化时间

    代码 @Test public void test(){ DateTime dateTime = new DateTime(); String str = dateTime.toString(&quo ...

  5. Java_常遇问题(一)

    Java_常遇问题 1.100/3 保留两位小数,处理方式: 业务场景一般在金额上 int a = 100, b =3; double result = Double.valueOf(new Deci ...

  6. Typecho反序列化导致前台 getshell 漏洞复现

    Typecho反序列化导致前台 getshell 漏洞复现 漏洞描述: Typecho是一款快速建博客的程序,外观简洁,应用广泛.这次的漏洞通过install.php安装程序页面的反序列化函数,造成了 ...

  7. python - psutil 系统信息模块

    # .psutil是一个跨平台库能够轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等)信息. # 它主要用来做系统监控,性能分析,进程管理. # 它实现了同等命令行工具提供的功能 ...

  8. Exception:两个类具有相同的 XML 类型名称,请使用 @XmlType.name 和 @XmlType.namespace 为类分配不同的名称

    具体报错:  找到报错的类: 对XmlType重新命名(最简单粗暴的方法):

  9. java的引用

    一.值类型与引用类型 1.变量初始化 int num = 10; String str = "hello"; num是int基本类型变量,值就直接保存在变量中.str是String ...

  10. 【转】Python-面向对象进阶

    [转]Python-面向对象进阶 一.isinstance(obj, cls) and issubclass(sub, super) 1. isinstance(obj, cls),检查obj是否是类 ...