实现功能:

  1、用户输入账户密码

  2、验证账户是否存在于黑名单,如果存在于黑名单,则执行1,否则往下执行

  3、验证用户名和密码。

    3.1、如果验证成功,则打印欢迎信息并退出程序;

    3.2、如果用户名存在,但是密码错误,则记录这个账户的错误次数(当前会话有效)

      3.2.1、如果错误次数等于等于3,则将这个用户写入锁定文件保存

  4、当错误次数(用户名存在但是密码错误 + 用户名不存在)大于等于3时,sleep(5),然后重置错误次数

 #!/usr/bin/env python3
__author__ = 'DSOWASP'
import getpass
import time error_count = 0 #认证错误次数,包括用户名错误和用户名正确但是密码错误
error_users = [] #用于存放用户名存在,但是密码错误的列表,存放数据格式如:
# [{'name':'ds','count':1},{'name':owasp','count':2}],当某个用户的count为3时,就把这个
# 用户加到locklist.txt文件中, 由于error_users保存在内存中,因此只有在当前会话有效 flag1 = 0 #0表示用户名不存在,1表示用户名密码正确,2表示用户名正确,但是密码错误
flag2 = 0 #0表示当前用户不存在与error_users中,1当前用户存在于error_users中或error为非空
while True:
username = input("用户名:").strip()
password = input("密码:").strip()
if username == "EXIT": #为了能正确退出程序而设置的
break
flag1 = 0
with open('locklist.txt','r') as f_lock: #验证此用户是否被锁定
u1 = f_lock.read().split("\n")
if u1.count(username) != 0:
print("此账户已被锁定!请选择其他账户登录")
time.sleep(1)
continue
with open('userlist.txt','r') as f_user: #验证用户名和密码
for line in f_user:
user = line.split()[0]
passwd = line.split()[1]
if username == user:
if password == passwd: #用户和密码都正确,设置flag=1
print("Welcome to My Python Page!!!")
flag1 = 1
break
elif flag2 == 1: #密码不对,且当前error_users为非空
flag1 = 2 #用户名正确,但是密码不对
for i in error_users: #判断这个用户是否已存在于error_users中
# print("循环字典1",error_users)
if username == i.get("name"): #在error_users中找到了这个账户
# print("找到字典元素:",username,error_users)
flag2 = 1 #当前用户存在于error_users中
i["count"] = i.get("count") + 1 #置当前用户的密码错误次数加1
if i.get("count") >= 3: #如果错误次数等于3
with open('locklist.txt','a') as f_lock: #就锁定这个账户
f_lock.write("\n%s" % username)
print("输入错误次数过多,%s账户已被锁定!请联系管理员!" %(username))
else: #如果错误次数小于3,则打印提示信息
print("用户%s已输入错误密码%d次,此账户还剩%d次尝试机会" % (i.get("name") , i.get("count"),3 - i.get("count")))
break #如果再error_users中找到了当前的用户,则退出error_users的循环
else: #如果在error_users中没找到这个用户,则打印提示信息,并设置flag2=0
flag2 = 0
if flag2 == 0: #添加当前用户到error_users中。
flag1 = 2 #用户名和密码都不正确
print("添加前字典情况",error_users)
error_users.append({'name':username,'count':1})
print("用户%s已输入错误密码1次,此账户还剩2次尝试机会" % (username))
print("添加%s用户到字典"%username)
print(error_users)
flag2 = 1 #设置flag2=1表示error_users为非空 if flag1 == 1: #flag1=1表示用户名密码正确,则退出
break
elif flag1 == 0: #flag=0表示用户名不存在斌,error_count加1
error_count += 1
print("用户名不存在,请重新输入,还剩%d次尝试机会" %(3 - error_count))
elif flag1 == 2: #flag1=2表示用户名正确但是密码错误.error_count 加1
error_count += 1
if error_count >= 3: #如果输错的此时大于等于3则打印提示信息,并sleep5秒,重置error_count
print("输入错误次数超过3次,请5秒后重新输入")
error_count = 0
time.sleep(5)

python作业1.1,编写登录模块的更多相关文章

  1. pyhton学习,day1作业,用户名密码登录模块

    要求,通过用户名密码登录,登录错误3次,锁定用户名 # coding=utf-8 # Author: RyAn Bi import os, sys #调用系统自己的库 accounts_file = ...

  2. day1 作业编写登录窗口

    作业一:编写登录接口 (1)输入用户名和密码: (2)认证成功后显示欢迎信息: (3)输错三次后锁定. 思路:我们知道,要想让程序记住之前输入多少次,锁定用户,那么可以使用数据库来保存用户的状态,然而 ...

  3. (转)python编写登录接口

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://506554897.blog.51cto.com/2823970/1907262 ...

  4. python基础一之课后作业:编写登录接口

    1 # Author : Mamba 2 3 #python基础一之课后作业:编写登录接口 4 5 # 输入用户名密码 6 # 认证成功后显示欢迎信息 7 # 用户名3次输入错误后,退出程序 8 # ...

  5. Flask10 登录模块、表单框架、表单渲染、表单验证、bookie、请求之前钩子、g对象、编写装饰器

    from flask import Flask from flask import request from flask import render_template from flask_wtf i ...

  6. 关于python怎样编写登录接口

    把今天的成果展示下,关于怎么用python编写登录接口, 要求是   1.输入用户名和密码 2.输错三次密码就锁定用户 3.认证成功后输出欢迎信息 账号文件内容如下: sanjiang sanjian ...

  7. Python作业--登录接口

    作业需求: 编写登陆接口 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定 实现思路: 1.从文件获取用户名密码 2.判断是否在黑名单中 3.验证用户名密码 成功:输出认证成功 错误:判断验证次 ...

  8. python 作业

    Linux day01 计算机硬件知识整理 作业要求:整理博客,内容如下 编程语言的作用及与操作系统和硬件的关系 应用程序->操作系统->硬件 cpu->内存->磁盘 cpu与 ...

  9. Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fabric模块

    Python第十五天  datetime模块 time模块   thread模块  threading模块  Queue队列模块  multiprocessing模块  paramiko模块  fab ...

随机推荐

  1. ColorMatrixFilter色彩矩阵滤镜;

    包 flash.filters 类 public final class ColorMatrixFilter 继承 ColorMatrixFilter  BitmapFilter  Object 使用 ...

  2. Highsoft.Highcharts 5.0.6439.38401 key

    Highcharts .NET allows developers to make charts using Highcharts API with the Microsoft .NET Framew ...

  3. C# 高性能对象映射(表达式树实现)

    前言 上篇简单实现了对象映射,针对数组,集合,嵌套类并没有给出实现,这一篇继续完善细节. 开源对象映射类库映射分析 1.AutoMapper 实现原理:主要通过表达式树Api 实现对象映射 优点: . ...

  4. SQLServer 统计查询语句消耗时间

    --方法1[set statistic ]: set statistics time on go --执行语句 xxxx go set statistics time off --方法2[getDat ...

  5. SSH的三个组件ssh、sftp、scp介绍

    SSH  包含3个组件 (1) ssh 远程登录节点 : ssh 用户名@IP地址 ① 不允许空密码或错误密码认证登录 ② 不允许root用户登录 ③ 有两个版本 ssh,ssh2安全性更高 (2)  ...

  6. B. Spreadsheets(进制转换,数学)

    B. Spreadsheets time limit per test 10 seconds memory limit per test 64 megabytes input standard inp ...

  7. 【bzoj2140】: 稳定婚姻 图论-tarjan

    [bzoj2140]: 稳定婚姻 哎..都是模板题.. 一眼看过去 哇 二分图哎 然后发现好像并不能匈牙利算法 自己xjb画两张图,发现二分图左向右连配偶的边,然后右向左连交往过的边 然后如果Bi G ...

  8. mysql主从复制数据库

    mysql主从复制相信已经用得很多了,但是由于工作原因一直没怎么用过.趁着这段时间相对空闲,也就自己实现一遍.尽管互联网上已有大把类似的文章,但是自身实现的仍然值得记录. 环境: 主服务器:cento ...

  9. 用Hadoop,还是不用Hadoop?

    本文由 伯乐在线 - Lex Lian 翻译.英文出处:Anand Krishnaswamy.欢迎加入翻译小组. Hadoop通常被认定是能够帮助你解决所有问题的唯一方案. 当人们提到“大数据”或是“ ...

  10. Sql Server两个数据库中有一张表的结构一样,怎么快速将一张表中的数据复制到另一个表中

    1,下面这句会把表2数据删除,然后把表1复制到表一,两表内容一样 SELECT * into 表2 FROM 表1 2,这句只追加,不删除表2的数据 insert into 表1 select * f ...