python 模拟用户登录代码

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

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

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

代码:

 1 #!/usr/bin/env python
 2 # -*- coding=utf-8 -*-
 3 __author__ = 'gmk'
 4 
 5 import sys
 6 import fileinput
 7 import getpass
 8 
 9 #打开用户列表, 只读
10 fileinfo = file('userlist.txt','r')
11 user_file = fileinfo.readlines()
12 fileinfo.close()
13 
14 #定义字典 {'张三':['123','1'],...}
15 userdict = {}
16 for line in user_file:
17     # userinfo = ['张三','123','0']
18     userinfo = line.strip().split(":")
19     # userdict['张三'] = []
20     userdict[userinfo[0]] = [userinfo[1],userinfo[2]]
21 
22 
23 #验证用户名
24 def verify_user(inputname):
25     #用户名为空
26     if inputname == '':
27         inputname = raw_input('用户名不能为空,请输入用户名:').strip()
28         verify_user(inputname)
29     #用户名不存在
30     elif inputname not in userdict:
31         inputname = raw_input('用户不存在,请重新输入用户名:').strip()
32         verify_user(inputname)
33     else:
34         #用户名正确,判断是否锁定
35         if userdict[inputname][1] == '1':
36             print '此用户已锁定,请联系管理员!'
37             sys.exit()
38         else:
39         #用户未锁定,进入密码判断
40             print '用户名正确!'
41             verify_pwd(inputname)
42 
43 
44 #验证密码
45 def verify_pwd(okname):
46     pwdinfo = getpass.getpass('请输入密码:').strip()
47     i = 2
48     while True:
49         if pwdinfo == userdict[okname][0]:
50             print '%s 欢迎回来!' % okname
51             sys.exit()
52         elif pwdinfo == '':
53             pwdinfo = getpass.getpass('密码不能为空,请输入密码:').strip()
54         else:
55             if i > 0:
56                 pwdinfo = getpass.getpass("密码错误,您还有 %d 次机会,请重新输入密码:" %i)
57                 i -= 1
58             else:
59                 update_file(okname)
60                 print '密码输入超过三次,用户被锁定!'
61                 sys.exit()
62 
63 #更新文件内容,锁定用户
64 def update_file(okname):
65     #旧的字符串   admin:123456:0
66     old_str = ':'.join([okname,userdict[okname][0],str(userdict[okname][1])])
67     #设置锁定标识
68     userdict[okname][1] = 1
69     #新的字符串   admin:123456:1
70     new_str = ':'.join([okname,userdict[okname][0],str(userdict[okname][1])])
71 
72     #替换用户状态信息
73     for line in fileinput.input('userlist.txt',inplace=1):
74         print line.strip().replace(old_str,new_str)
75     fileinput.close()
76 
77 
78 user_input = raw_input('欢迎使用员工后台系统!请输入用户名:').strip()
79 verify_user(user_input)
View Code

运行结果:

 1 [root@o2-test ~]# python login.py 
 2 欢迎使用员工后台系统!请输入用户名:
 3 用户名不能为空,请输入用户名:qweqwerqwer
 4 用户不存在,请重新输入用户名:qqq
 5 用户名正确!
 6 请输入密码:
 7 密码不能为空,请输入密码:
 8 密码错误,您还有 2 次机会,请重新输入密码:
 9 密码不能为空,请输入密码:
10 密码不能为空,请输入密码:
11 密码错误,您还有 1 次机会,请重新输入密码:
12 密码输入超过三次,用户被锁定!
13 [root@o2-test ~]# python login.py 
14 欢迎使用员工后台系统!请输入用户名:qqq
15 此用户已锁定,请联系管理员!
16 [root@o2-test ~]# python login.py 
17 欢迎使用员工后台系统!请输入用户名:admin
18 用户名正确!
19 请输入密码:
20 admin 欢迎回来!

userlist.txt结果:

1 [root@o2-test ~]# cat userlist.txt 
2 张三:123:0
3 李四:456:0
4 admin:123:0
5 qqq:123:1
原文地址:https://www.cnblogs.com/mkuu/p/4953147.html