python 用户登录
要求:
1、用户在登录之前要判断密码文件是否已经是锁定状态,如果是提示不让登录
2、登录用户密码输入错误3次,就锁定改用户,并更新文件内容
3、登录正确,提示欢迎登录信息
data.txt 文件内容:
root:aaa:0
adm:bbb:1
ops:ccc:3
以冒号分割,用户名:密码:用户对应的状态(3表示改用户被锁定)
代码:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os,sys,getpass # getpass是输入密码的时候不显示输入的内容,和Linux命令终端输入密码时一样
os.system('cls')
u = 0
while u < 3: # 如果用户3次输入的用户名都是错误就有问题,不然再输入了
username = input('请输入用户名:')
user_f = open('data.txt', 'r') # 以读方式打开
user_str = user_f.read() # 读取文件所有内容
user_f.close()
user_info = user_str.strip().split('\n') # 去掉空且以换行符作为分割生产列表 ['root:aaa:3', 'adm:bbb:1', 'ops:ccc:3']
user_list = []
for user_line in user_info:
user_tmp = user_line.split(':') # 再以冒号分割生成子列表,这种样子格式['root', 'aaa', '3']
user_list.append(user_tmp) # 这里的内容就是 [['root', 'aaa', '3'], ['adm', 'bbb', '1'], ['ops', 'ccc', '3']]
print(user_list)
for user_one in user_list:
if username == user_one[0] and int(user_one[-1]) == 3: # 看输入的用户是不是已经是锁定状态(data.txt文件的第3列如果是3就表示之前连续输错3次)
print('用户 %s 已经锁定,请联系您的系统管理员!' % username)
sys.exit(1)
for user_one in user_list:
if username == user_one[0]: # 判断输入的用户名是不是在文件中,条件成立往下执行
p = 0 # 初始化密码计数器
while p < 3:
passwd = input('请输入密码:')
if passwd == user_one[1]: # 前面用户名已经判断了,这里只需要判断密码是不是正确的就行
print('欢迎登陆!')
sys.exit(0)
else:
if p != 2:
print('对不起,%s 的密码错误,您还有 %d 次机会!' % (username, 2 - p))
p += 1 # 能执行到这一步说明密码输错了,计数器 +1
else:
user_one[2] = 3 # 如果用户连续3次输入错密码就要更新这个用户对应的密码记录,并锁定用户
user_f = open('data.txt', 'w')
for user_info2 in user_list:
user_f.write(user_info2[0] + ':' + user_info2[1] + ':' + str(user_info2[2]) + '\n') # 把当前的值更新到文件中
user_f.close()
sys.exit('对不起,%s 用户已被锁定,请联系管理员!' % username)
else:
pass
else:
if u != 2:
print('对不起,您输入的用户 %s 不存在,您还有 %d 机会。' % (username, 2-u))
u += 1
else:
sys.exit('用户输入错误3次,程序已退出。')
程序运行效果:
请输入用户名:root
[['root', 'aaa', '2'], ['adm', 'bbb', '1'], ['ops', 'ccc', '3']] # 从文件读取出来转换成列表形式,这里打印出来是方便实验
请输入密码:11
对不起,root 的密码错误,您还有 2 次机会!
请输入密码:11
对不起,root 的密码错误,您还有 1 次机会!
请输入密码:11
对不起,root 用户已被锁定,请联系管理员!
此时data.txt文件内容的root用户登录次数已更新到 3 ,再次登录 root 提示被锁定
请输入用户名:root
[['root', 'aaa', '3'], ['adm', 'bbb', '1'], ['ops', 'ccc', '3']]
用户 root 已经锁定,请联系您的系统管理员!
正常登录:
请输入用户名:adm
[['root', 'aaa', '3'], ['adm', 'bbb', '1'], ['ops', 'ccc', '3']]
请输入密码:bbb
欢迎登陆!
原文:http://www.cnblogs.com/brianzhu/articles/6282905.html
python 用户登录的更多相关文章
- python用户登录,密码错误3次则锁定
需求: 1.输入用户名密码 2.认证成功后显示欢迎信息 3.输错三次后锁定 实现思路: 1.判断用户是否在黑名单,如果在黑名单提示账号锁定. 2.判断用户是否存在,如果不存在提示账号不存在. 3.判断 ...
- 第三篇python用户登录程序实现
需求: 1.通过注册输入用户名和密码 2.能够验证用户名和密码是否正确 3.限制输入一定错误次数后退出程序 4.利用格式化输出方式输出信息 分析: 使用username=input()和passwor ...
- python 初学习 模拟用户登录
#!/usr/bin/env python#coding:utf-8''' 2017年8月19日 模拟用户登录,userfile 文件保存字典 用户名,和密码 sorryname 文件保存字典 登录过 ...
- Python程序练习1-模拟用户登录验证
1.功能简介 此程序模拟用户登录验证的过程,实现用户名输入.黑名单检测.用户有效性判别.密码输入及验证等.用户在3次以内输入正确密码登陆成功,连续输错3次密码登陆失败,且该用户名被记录在黑名单,黑名单 ...
- python 全栈开发,Day119(Flask初识,Render Redirect HttpResponse,request,模板语言 Jinja2,用户登录例子,内置Session)
一.Flask初识 首先,要看你学没学过Django 如果学过Django 的同学,请从头看到尾,如果没有学过Django的同学,并且不想学习Django的同学,轻饶过第一部分 三大主流Web框架对比 ...
- Python之简单的用户登录和注册
# -*- coding: utf-8 -*- # @Time : 2018/7/26 20:16 # @Author : Adam # @File : exam2.py # @Project: ke ...
- Python练习-有点儿意思的用户登录
Alex大神的需求(说实话他需求真特么多,真难满足他): 编写一个用户登陆接口:输入用户名密码,认证成功后显示欢迎信息,输错三次后锁定; # 编辑者:闫龙 #用户登录功能输入3次以上会被锁定:为了方便 ...
- python实现用户登录问候
创建一个至少包含 5个用户名的列表,且其中一个用户名为 'admin' .想象你要编写代码,在每位用户登录网站后都打印一条问候消息.遍历用户名列表,并向每位用户打印一条问候消息.添加一条 if 语句, ...
- Python阶段复习 - part 4 - 用户登录程序
简易版: #!/usr/bin/env python # _*_ coding:UTF-8 _*_ # __auth__:Dahlhin import sys userinfo = r'userinf ...
随机推荐
- H5读取本地文件操作
H5读取本地文件操作 本文转自:转:http://hushicai.com/2014/03/29/html5-du-qu-ben-di-wen-jian.html感谢大神分享. 常见的语言比如php. ...
- 玩玩微信公众号Java版之六:微信网页授权
我们经常会访问一些网站,用微信登录的时候需要用到授权,那么微信网页授权是怎么一回事呢,一起来看看吧! 参考官方文档:https://mp.weixin.qq.com/wiki?t=resource ...
- DDOS的攻击原理和如何防护网站和游戏恶意攻击
DDOS的攻击原理和如何防护网站和游戏恶意攻击 1-DDOS全名是Distribution Denial of Service (分布式拒绝服务攻击),很多DOS攻击源 ...
- 机器学习 —— 基础整理(六)线性判别函数:感知器、松弛算法、Ho-Kashyap算法
这篇总结继续复习分类问题.本文简单整理了以下内容: (一)线性判别函数与广义线性判别函数 (二)感知器 (三)松弛算法 (四)Ho-Kashyap算法 闲话:本篇是本系列[机器学习基础整理]在time ...
- (转)Java中equals和==的区别
java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolean 他们之间的比较,应用双等号( ...
- 微信小程序(一)基本知识初识别
最近微信圈里小程序很火的样子,以前小程序刚开始的时候研究了一下,多日没关注发现一些东西都淡忘了,最后决定还是记录下来的好. 毕竟好记星比不上烂笔头嘛~ 另外有想学习小程序的同学,也可以参考下,当然如果 ...
- 【PHP】数据类型转换
PHP的数据类型转换属于强制转换,允许转换的PHP数据类型有: (int).(integer):转换成整形 (float).(double).(real):转换成浮点型 (string):转换成字符串 ...
- JStorm与Storm源码分析(五)--SpoutOutputCollector与代理模式
本文主要是解析SpoutOutputCollector源码,顺便分析该类中所涉及的设计模式–代理模式. 首先介绍一下Spout输出收集器接口–ISpoutOutputCollector,该接口主要声明 ...
- pwnable.kr col之write up
Daddy told me about cool MD5 hash collision today. I wanna do something like that too! ssh col@pwnab ...
- JAVA 中BIO,NIO,AIO的理解以及 同步 异步 阻塞 非阻塞
在高性能的IO体系设计中,有几个名词概念常常会使我们感到迷惑不解.具体如下: 序号 问题 1 什么是同步? 2 什么是异步? 3 什么是阻塞? 4 什么是非阻塞? 5 什么是同步阻塞? 6 什么是同步 ...