实现功能:

  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. poj3080 Blue Jeans(暴枚+kmp)

    Description The Genographic Project is a research partnership between IBM and The National Geographi ...

  2. 迷宫救人——DFS小题

    原创 题目大意:人质被困在迷宫之中,要求你寻找一条最短路径快速找到人质. 如图,人质在黄色点2处,营救者在起点红色处,1表示无法通过的障碍点,寻找一条最短路径快速找到人质. 毫无疑问用DFS,遍历4个 ...

  3. MongoDB整理笔记の高级查询

    1.条件操作符 <, <=, >, >= 这个操作符就不用多解释了,最常用也是最简单的    db.collection.find({ "field" : ...

  4. 【C#】is 和 as

    看个例子: public class User { } public class Group { } class Program { static void Main(string[] args) { ...

  5. js 判断今天是否上班

    <script> var weekdate= getWeekDate() switch(weekdate){ case "星期一":; case "星期二&q ...

  6. 使用 wget 下载需要 cookie 认证的网站

    .使用火狐,安装 Export Cookies 插件 2.登录网站,点菜单"工具-Export Cookies..",保存 cookies.txt 到自己的文件夹 3.把 cookies.t ...

  7. Nginx conf基本配置

    #定义Nginx运行的用户和用户组 user www www;   #nginx进程数,建议设置为等于CPU总核心数. worker_processes 8;   #全局错误日志定义类型,[ debu ...

  8. Invalid App Store Icon. The App Store Icon in the asset catalog in 'xxx.app' can’t be transparent nor contain an alpha channel.

    1.向appstore上传应用的时候,报了这样一个错误 ERROR ITMS-90717: "Invalid App Store Icon. The App Store Icon in th ...

  9. eclipse搭建maven project的spring4 spring mvc mybatis

    一,先确定已经安装好了Eclipse Java EE IDE for Web Developers我用的是如下版本 Version: Neon.3 Release (4.6.3)Build id: 2 ...

  10. flex 实例Demo

    Flex 页面布局 很方便 快捷 <!DOCTYPE html> <html lang="en"> <head> <meta charse ...