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

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. 【转】Linux Top 命令解析 比较详细

    TOP命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况.   TOP是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户 ...

  2. c语言操作一维数组-3

    C语言选择题#includemain(){double a[15],k;k=fun(a);} 则以下选项中错误的fun函数首部是 ( D)A.double fun(double a[15]) B.do ...

  3. 读IT小小鸟有感

           第一次阅读<我是一只IT小小鸟>是在老师的推荐下的,我是一名软工大一新生,那天在课堂上听到了这本书,由于是10年前的老书,要找到它非常不易,终于在网上看到一些部分电子档.   ...

  4. AJAX JSONP源码实现(原理解析)

    关于JSONP以及跨域问题,请自行搜索. 本文重点给出AJAX JSONP的模拟实现代码,代码中JSONP的基本原理也一目了然. <html xmlns="http://www.w3. ...

  5. 我的PHP编程环境变迁:notepad -> notepad++ -> Sublime Text2 -> PhpStorm

    10多年前最一开始写PHP程序的时候是用windows自带的notepad,现在想来真的很屌丝. 后来经人推荐换成了notepad++,感觉还是相当不错的(中间还用过一阵子editplus). 比较喜 ...

  6. X3850M2安装CertOS 7 KVM 2--VNC

    需要安装远程桌面,否则无鼠标的日子比较难. VNC的安装需要步骤较多,重点参考以下文章: http://www.itzgeek.com/how-tos/linux/centos-how-tos/con ...

  7. jsp中的正则表达式

    sp中${}----是EL表达式的常规表示方式目的是为了获取{}中指定的对象(参数.对象等)的值如:${user.name}<====>User user = (User)request( ...

  8. 自定义jsp标签

    1.类: package ===============================; import javax.servlet.jsp.JspTagException; import javax ...

  9. 服务器sh脚本自动登录(mac)

    一不小心自己也有三台虚拟机了,每次都ssh -username@ip 然后在输入密码着实蛋疼,第一反应时脚本登录,但是作为脚本是逐行执行命令,是无法做到等待一个密码提示出现在输入密码的.查到mac下可 ...

  10. 从UWP到SWIFT-页面间反向传值

    页面1跳转到页面2,在页面2点击button后,页面1的内容被改变.实际使用 protocol(就是c#中的interface),将页面1的viewcontroller转换为protocol传入页面2 ...