要求:
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