python作业1.1,编写登录模块
实现功能:
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,编写登录模块的更多相关文章
- pyhton学习,day1作业,用户名密码登录模块
要求,通过用户名密码登录,登录错误3次,锁定用户名 # coding=utf-8 # Author: RyAn Bi import os, sys #调用系统自己的库 accounts_file = ...
- day1 作业编写登录窗口
作业一:编写登录接口 (1)输入用户名和密码: (2)认证成功后显示欢迎信息: (3)输错三次后锁定. 思路:我们知道,要想让程序记住之前输入多少次,锁定用户,那么可以使用数据库来保存用户的状态,然而 ...
- (转)python编写登录接口
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://506554897.blog.51cto.com/2823970/1907262 ...
- python基础一之课后作业:编写登录接口
1 # Author : Mamba 2 3 #python基础一之课后作业:编写登录接口 4 5 # 输入用户名密码 6 # 认证成功后显示欢迎信息 7 # 用户名3次输入错误后,退出程序 8 # ...
- Flask10 登录模块、表单框架、表单渲染、表单验证、bookie、请求之前钩子、g对象、编写装饰器
from flask import Flask from flask import request from flask import render_template from flask_wtf i ...
- 关于python怎样编写登录接口
把今天的成果展示下,关于怎么用python编写登录接口, 要求是 1.输入用户名和密码 2.输错三次密码就锁定用户 3.认证成功后输出欢迎信息 账号文件内容如下: sanjiang sanjian ...
- Python作业--登录接口
作业需求: 编写登陆接口 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定 实现思路: 1.从文件获取用户名密码 2.判断是否在黑名单中 3.验证用户名密码 成功:输出认证成功 错误:判断验证次 ...
- python 作业
Linux day01 计算机硬件知识整理 作业要求:整理博客,内容如下 编程语言的作用及与操作系统和硬件的关系 应用程序->操作系统->硬件 cpu->内存->磁盘 cpu与 ...
- Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fabric模块
Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fab ...
随机推荐
- 如何创建JUnit
这里拿Dynamic项目来演示,首先创建一个Dynamic项目,起名,点next, 继续点next, 将web.xml文件勾选,finish, 接下来在Java Resources->src下创 ...
- POJ3026 Borg Maze(bfs求边+最小生成树)
Description The Borg is an immensely powerful race of enhanced humanoids from the delta quadrant of ...
- 煤球数目——第七届蓝桥杯C语言B组(省赛)第一题
原创 煤球数目 有一堆煤球,堆成三角棱锥形.具体:第一层放1个,第二层3个(排列成三角形),第三层6个(排列成三角形),第四层10个(排列成三角形),....如果一共有100层,共有多少个煤球? 请填 ...
- C#winform拖动无边框窗体
private bool isMouseLeftKeyDown = false; private Point mousePointToClient = new Point();//相对于本窗体鼠标位置 ...
- 解决在cmder中bash(WSL)上下箭头不能使用问题
有三种解决方式,第一种方式最简单实用 安装新版本wslbridge 这个解决方法最简单,最实用,下载第三方wslbridge,安装即可使用. 这时再进入cmder,运行bash.exe,可以发现上下左 ...
- VSCODE 针对调试C语言时一闪而过解决办法
针对调试C语言时一闪而过解决办法 前提: 已经按照 C/C++ 已经安装 MINGW(并配置完成) 原因: 主要是因为tasks的配置没有写对 解决办法: tasks.json { // See h ...
- 201621123012 《Java程序设计》第6周学习总结
1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图或相关笔记,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰 ...
- C# 小球100米自由落下
//一球从N 米高自由落下,每次落地后反跳回原高度的一般:再录下,求它在第十次落地时,共经过多少米?第10次反弹多高 static string ballDsitance(float height1, ...
- loj #2116. 「HNOI2015」开店
#2116. 「HNOI2015」开店 题目描述 风见幽香有一个好朋友叫八云紫,她们经常一起看星星看月亮从诗词歌赋谈到人生哲学.最近她们灵机一动,打算在幻想乡开一家小店来做生意赚点钱.这样的想法当然非 ...
- 2018数学建模A题优秀论文:高温作业专用服装设计
高温作业专用服装设计 摘 要 本文针对多层材料的高温作业服装的传热问题进行研究,综合考虑多种传热方式建立传热模型,并以此模型为基础解决了服装设计中各层材料最佳厚度的问题. 对于问题一,要求在热物性系数 ...