需求:

1.输入用户名密码

2.认证成功后显示欢迎信息

3.输错三次后锁定

实现思路:

1.判断用户是否在黑名单,如果在黑名单提示账号锁定。

2.判断用户是否存在,如果不存在提示账号不存在。

3.判断账号密码是否正确,如果正确登录进去。如果不正确有三次输入密码机会。三次全部输错,账号锁定。

方法一:(简易版本)

count = 0
username = "xuyuanyuan"
password = "123" with open("file.txt",mode="r",encoding="utf8") as f:
file_list=f.readlines()
name=input("请输入用户名:")
#判断输入用户名是否在黑名单中
if name in file_list:#如果用户名在黑名单内
print("您的账户已锁定,请联系管理员!")
else:
#判断用户名是否存在
if name == username:
while count < 3:
pwd = input("请输入您的密码:")
if pwd == password:
print("welcome %s" %name)
break
else:
print("password is error!")
count+=1
else:#如果用户名输入错误超过三次的话,就将用户名加入到黑名单file.txt文件里
print("您输入的次数已经超过三次,账号已锁定,请联系管理员!")
with open("file.txt", mode="a+", encoding="utf8") as f:
test=("%s"%name)
f.writelines(test) else:
print("该用户名不存在,请重新输入!")

 方法二:

# 获取注册用户的信息
with open("db", "r", encoding="UTF-8") as f:
# users = f.readlines() # 读成列表
# users = f.read() # 读到内存
users = {}
for line in f:
user_list = line.strip().split("|") # 分割得到列表
# print(user_list)
users[user_list[0]] = {#往字典里加内容
"username": user_list[0],
"passwd": user_list[1],
"times": user_list[2],
}
# print(users) # # 读取黑名单
black_list = []
with open("blacklist.txt", "r", encoding="UTF-8") as f2:
for line in f2:
black_list.append(line.strip())
# print(black_list)
#
while True:
# 获取用户输入
username = input("用户名:").strip()
passwd = input("密码:").strip() # 判断是不是黑名单用户
if username in black_list:
print("用户名已被锁定,请联系管理员!")
# 把用户信息再写回文件
with open("db", "w", encoding="UTF-8") as f4:
for j in users:#遍历的是字典里的key
f4.write(users[j]["username"] + "|" + users[j]["passwd"] + "|" + str(
users[j]["times"]) + "\n")
# 字典是无序的
# f4.write("|".join([lambda x: str(x) for x in users[j].values()])+ "\n")
break # 判断用户名存不存在
elif username in users:
if passwd == users[username]["passwd"]:
print("登录成功")
# 把之前的错误次数清空
users[username]["times"] = 0
# 把用户信息再写回文件
with open("db", "w", encoding="UTF-8") as f4:
for j in users:
# users[j]是每个用户的字典
f4.write(users[j]["username"] + "|" + users[j]["passwd"] + "|" + str(users[j]["times"]) + "\n")
break
else:
print("用户名密码错误")
# 判断输错次数
users[username]["times"] = int(users[username]["times"]) # 转成int类型
users[username]["times"] += 1
if users[username]["times"] >= 3:
print("用户名被锁定啦!")
# 加入黑名单
black_list.append(username)
with open("blacklist.txt", "w") as f3:
for i in black_list:
f3.write(i+"\n")
# 把用户信息再写回文件
with open("db", "w", encoding="UTF-8") as f4:
for j in users:
# users[j]是每个用户的字典
f4.write(users[j]["username"] + "|" + users[j]["passwd"] + "|" + str(
users[j]["times"]) + "\n") break
else:
print("用户名不存在")

  

 

python用户登录,密码错误3次则锁定的更多相关文章

  1. vsftpd本地用户登录密码错误

    今天发现自己虚拟机的vsftp使用本地用户名无法登陆,于是重新配置,但配置了很多次都没成功,一直显示 530 Login incorrect. Login failed 尝试了网上很多修改PAM的方案 ...

  2. 解决mac 下mysql安装后root用户登录密码错误问题

    使用的mac OS 10.11  安装mysql后访问root/root用户失败,网上找了一些解决办法,下面记录下解决方法方便以后自己查询 概述(看懂下面就不用看了): 停服务:sudo /usr/l ...

  3. [linux]解除linux对多次登录密码错误的账户的锁定

    其他wheel账户下,执行: sudo pam_tally2 --user=username --reset

  4. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(15)-用户登录详细错误和权限数据库模型设计

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(15)-用户登录详细错误和权限数据库模型设计     ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)    ...

  5. 系统开发中使用拦截器校验是否登录并使用MD5对用户登录密码进行加密

    项目名称:客户管理系统 项目描述: 项目基于javaEE平台,B/S模式开发.使用Struts2.Hibernate/Spring进行项目框架搭建.使用Struts中的Action 控制器进行用户访问 ...

  6. 利用 John the Ripper 破解用户登录密码

    一.什么是 John the Ripper ? 看到这个标题,想必大家都很好奇,John the Ripper 是个什么东西呢?如果直译其名字的话就是: John 的撕裂者(工具). 相比大家都会觉得 ...

  7. MySQL 用户登录密码和远程登录权限问题

    1.mysql数据库,忘记root用户登录密码. 解决如下: a.重置密码 #/etc/init.d/mysqld stop #mysqld_safe --user=mysql --skip-gran ...

  8. opencms忘记Admin用户登录密码解决方案

    不知道现在还有多少人在用opencms: 我今天就是遇到一个问题,很久之前部署的一台opencms服务器,突然忘记密码了,记录下处理方法: 希望对你有帮助: opencms忘记Admin用户登录密码了 ...

  9. 修改ranger ui的admin用户登录密码踩坑小记

    修改的ranger ui的admin用户登录密码时,需要在ranger的配置里把admin_password改成一样的,否则hdfs的namenode在使用admin时启动不起来,异常如下: Trac ...

随机推荐

  1. 接口测试工具postman(三)添加断言

    每个用例执行完成后,可以通过添加断言来判断返回结果是否正确,即表示用例执行是否成功. 官方说明文档:https://learning.getpostman.com/docs/postman/scrip ...

  2. Mac下安装pear库+phpDocumentor

    1. 首先安装pear: curl -o go-pear.php https://pear.php.net/go-pear.phar 看见这个就安装OK: % Total % Received % X ...

  3. 腾讯云,搭建 FTP 文件服务

    腾讯云,搭建 FTP 文件服务 腾讯云,搭建 FTP 文件服务 安装并启动 FTP 服务 任务时间:5min ~ 10min 安装 VSFTPD 使用 yum 安装 vsftpd: yum insta ...

  4. c++调用Python基础功能

    c++调用Python首先安装Python,以win7为例,Python路径为:c:\Python35\,通过mingw编译c++代码.编写makefile文件,首先要添加包含路径:inc_path ...

  5. Python3 初识Python

    一 Python简介 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC ...

  6. StanFord 编程方法

    教程下载地址:http://www.yyets.com/resource/26208 定制工具下载地址:http://www.stanford.edu/class/cs106a/cgi-bin/cla ...

  7. 小C的记事本(栈记录字符串)

    链接:https://www.nowcoder.com/acm/contest/122/D来源:牛客网 题目描述 小C最近学会了java小程序的开发,他很开心,于是想做一个简单的记事本程序练练手. 他 ...

  8. vue里的this

    vue中methods对象里的函数, this指向的都是当前实例或者组件.

  9. JQuery排错关于$(document).ready(function(){});

    最近写了好多JQuery.也出了很多问题.不知道怎么回事.程序就不往下执行了.很是郁闷. 查了下资料,这里可能会有以下几种原因:1.js文件的引用路径不正确,特别是使用了命名空间,容易造成路径错误,使 ...

  10. P2168 [NOI2015]荷马史诗

    题目描述 追逐影子的人,自己就是影子 ——荷马 Allison 最近迷上了文学.她喜欢在一个慵懒的午后,细细地品上一杯卡布奇诺,静静地阅读她爱不释手的<荷马史诗>.但是由<奥德赛&g ...