需求:输入用户名,判断用户是否被锁定,锁定则退出,否则进入密码验证,输入三次错误密码之后此用户被锁定。

userlist.txt里,用":"将用户名、密码、状态码分开:

[root@o2-test ~]# cat userlist.txt
张三:123:0
李四:456:0
admin:123:0
qqq:123:0

代码:

 #!/usr/bin/env python
# -*- coding=utf-8 -*-
__author__ = 'gmk' import sys
import fileinput
import getpass #打开用户列表, 只读
fileinfo = file('userlist.txt','r')
user_file = fileinfo.readlines()
fileinfo.close() #定义字典 {'张三':['123','1'],...}
userdict = {}
for line in user_file:
# userinfo = ['张三','123','0']
userinfo = line.strip().split(":")
# userdict['张三'] = []
userdict[userinfo[0]] = [userinfo[1],userinfo[2]] #验证用户名
def verify_user(inputname):
#用户名为空
if inputname == '':
inputname = raw_input('用户名不能为空,请输入用户名:').strip()
verify_user(inputname)
#用户名不存在
elif inputname not in userdict:
inputname = raw_input('用户不存在,请重新输入用户名:').strip()
verify_user(inputname)
else:
#用户名正确,判断是否锁定
if userdict[inputname][1] == '':
print '此用户已锁定,请联系管理员!'
sys.exit()
else:
#用户未锁定,进入密码判断
print '用户名正确!'
verify_pwd(inputname) #验证密码
def verify_pwd(okname):
pwdinfo = getpass.getpass('请输入密码:').strip()
i = 2
while True:
if pwdinfo == userdict[okname][0]:
print '%s 欢迎回来!' % okname
sys.exit()
elif pwdinfo == '':
pwdinfo = getpass.getpass('密码不能为空,请输入密码:').strip()
else:
if i > 0:
pwdinfo = getpass.getpass("密码错误,您还有 %d 次机会,请重新输入密码:" %i)
i -= 1
else:
update_file(okname)
print '密码输入超过三次,用户被锁定!'
sys.exit() #更新文件内容,锁定用户
def update_file(okname):
#旧的字符串 admin:123456:0
old_str = ':'.join([okname,userdict[okname][0],str(userdict[okname][1])])
#设置锁定标识
userdict[okname][1] = 1
#新的字符串 admin:123456:1
new_str = ':'.join([okname,userdict[okname][0],str(userdict[okname][1])]) #替换用户状态信息
for line in fileinput.input('userlist.txt',inplace=1):
print line.strip().replace(old_str,new_str)
fileinput.close() user_input = raw_input('欢迎使用员工后台系统!请输入用户名:').strip()
verify_user(user_input)

运行结果:

 [root@o2-test ~]# python login.py
欢迎使用员工后台系统!请输入用户名:
用户名不能为空,请输入用户名:qweqwerqwer
用户不存在,请重新输入用户名:qqq
用户名正确!
请输入密码:
密码不能为空,请输入密码:
密码错误,您还有 2 次机会,请重新输入密码:
密码不能为空,请输入密码:
密码不能为空,请输入密码:
密码错误,您还有 1 次机会,请重新输入密码:
密码输入超过三次,用户被锁定!
[root@o2-test ~]# python login.py
欢迎使用员工后台系统!请输入用户名:qqq
此用户已锁定,请联系管理员!
[root@o2-test ~]# python login.py
欢迎使用员工后台系统!请输入用户名:admin
用户名正确!
请输入密码:
admin 欢迎回来!

userlist.txt结果:

 [root@o2-test ~]# cat userlist.txt
张三::
李四::
admin::
qqq::

python 模拟用户登录代码的更多相关文章

  1. Python模拟用户登录场景

    简单模拟登录场景,将已知的用户名及密码固化,通过用户输入内容和已固化的内容比较进行判断用户名和密码是否输入正确. 在用户输入时,将密码隐藏需要导入模块getpass import getpass _u ...

  2. Python模拟用户登录

    # coding=utf8 import hashlib db = { 'michael':'e10adc3949ba59abbe56e057f20f883e', 'bob':'878ef96e861 ...

  3. python 初学习 模拟用户登录

    #!/usr/bin/env python#coding:utf-8''' 2017年8月19日 模拟用户登录,userfile 文件保存字典 用户名,和密码 sorryname 文件保存字典 登录过 ...

  4. 模拟用户登录含注册——python第8天

    print('欢迎登录尚雅梦想python学习系统'.center(30)) print('******' * 8) flag = True while flag: order = input(''' ...

  5. python小练习--模拟用户登录,(3次重试机会,登录成功展示登录账号密码)

    知识点使用:1.格式化输出的两种方法---% .formate 2.while循环的使用,及跳出循环的两种方法---break(跳出循环体).continue(结束本次循环,继续下次循环) 3.if条 ...

  6. python用scrapy模拟用户登录

    scrapy模拟登录 关注公众号"轻松学编程"了解更多. 注意:模拟登陆时,必须保证settings.py里的COOKIES_ENABLED(Cookies中间件) 处于开启状态 ...

  7. 用python连接数据库模拟用户登录

    使用pycharm下载pymysql库,在终端输入命令: pip install mysql 使用pycharm写登入操作前需要在数据库内添加一些数据,比如用户名和密码 create database ...

  8. 利用Python模拟GitHub登录

    最近学习了Fiddler抓包工具的简单使用,通过抓包,我们可以抓取到HTTP请求,并对其进行分析.现在我准备尝试着结合Python来模拟GitHub登录. Fiddler抓包分析 首先,我们想要模拟一 ...

  9. python实现用户登录、注册实例

    python面向函数式编程,模拟用户登录验证.注册的代码实现. 主要有以下两个文件: 1.user.txt文档文件,相当于数据库的用户信息表,主要是记录用户名和密码. 注意:1)此文档需要与.py文件 ...

随机推荐

  1. C#如何获取项目中的其他文件夹的路径

    //一般用string p=AppDomain.CurrentDomain.BaseDirectory+"\\其他"; //其它的还有 string str1 =Process.G ...

  2. NPOI 2.0 读取、编辑、保存Excel文件

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...

  3. VMware下利用ubuntu13.04建立嵌入式开发环境之一

    1.软件准备: (1) VMware网上很多,需要根据自己的需要选择,这里选用的VMware Workstation 9. (2)ubuntu  操作系统,同样根据自己的需要下载系统安装包.这里我选择 ...

  4. iOS开发一个用户登录注册模块需要解决的坑

    最近和另外一位同事负责公司登录和用户中心模块的开发工作,开发周期计划两周,减去和产品和接口的协调时间,再减去由于原型图和接口的问题,导致强迫症纠结症状高发,情绪不稳定耗费的时间,能在两周基本完成也算是 ...

  5. 安全协议系列(三)----CCMP与WPA-PSK

    本节讨论 CCM 在 WiFi 中的实际应用 -- CCMP 协议 根据 RFC 3610,完成 CCMP 报文的加解密,需要提供:分组密钥(K).随机数(Nonce).附加认证数据(AAD),这三个 ...

  6. UVa 1391 Astronauts (2SAT)

    题意:给出一些宇航员他们的年龄,x是他们的平均年龄,其中A任务只能给年龄大于等于x的人,B任务只能给小于x的人,C任务没有限制.再给出m对人,他们不能同任务.现在要你输出一组符合要求的任务安排. 思路 ...

  7. Python学习路程-常用设计模式学习

    本节内容 设计模式介绍 设计模式分类 设计模式6大原则 1.设计模式介绍 设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复 ...

  8. 【笔记】ListView的使用

    1.0 ListView三要素 1.0.1  创建基本步骤 1.在布局文件中创建一个ListView组件,并在Activity中声明这个组件. 2.在Activity中,创建一个合适的Adapter. ...

  9. ECLIPSE/JAVAWEB (二)三大框架之Hibernate框架 持续更新中...

    (一)发展历史 在Struts框架中使用jdbc连接来读写数据库,我们最常见的就是打开数据库连接.使用复杂的sql语句进行读写.关闭连接,获得的数据又需要转换或封装后往外传,这是一个非常繁琐的过程. ...

  10. REVERSE-Daily(4)-Elfcrackme2

    非常坑爹的一道题目,看似非常简单,实则有套路 链接: http://pan.baidu.com/s/1i4XLCd3 密码:9zho 为了练手 我会写出三种解法,包括 结合ascii码值范围的爆破,动 ...