第二次笔记

本次笔记就以作业来记录了

最终的脚本如下:

'''
基础需求:
让用户输入用户名密码
认证成功后显示欢迎信息
输错三次后退出程序

升级需求:
可以支持多个用户登录 (提示,通过列表存多个账户信息)
用户3次认证失败后,退出程序,再次启动程序尝试登录时,还是锁定状态(提示:需把用户锁定的状态存到文件里)
''’

import getpass
import sys
user_list={"tom":"passwd1","eygle":"passwd12","mike":"passwd3"}
exit_flag=0
loop_times=0
user_error_list={}
while exit_flag == 0:
username=input("请输入用户名:")
password=getpass.getpass("请输入密码:")
try:
data = open('lock.list')
for locked_user in data:
if username==locked_user:
print('用户已被锁定,请联系管理员!')
sys.exit (1)
except IOError:
open("lock.list","w").close()
if username in user_list:
if password==user_list[username]:
print('''
welcome %s,have a nice day!
'''%(username))
exit_flag = 1
else:
print('密码不正确,请重新输入!')
if username in user_error_list:
loop_times=user_error_list[username]+1
user_error_list[username]=loop_times
if user_error_list[username]==3:
print('%s错误登陆次数太多,已被锁定,程序退出'%(username))
with open('lock.list', 'a') as f:
f.write(username)
f.write('\n')
exit_flag = 1
else:
loop_times = 1
user_error_list[username]=loop_times
else:
print('用户名正不确!')
exit_flag = 1

这里有几个难点:
如何退出同一用户连续试错三次的的循环?
后面选择了while,在需要退出的部分将标记设置为不满足while循环条件的值即可。
另外,如何考虑是对于同一用户登录删除才退出?不注意就可能触发系统的bug,比如a用户输入错误两次,b用户再来一次,如果没有中间结果对于用户尝试次数进行记录,那么会出现b用户只错了一次,但是由于前面其他用户名的尝试,被锁了。
其实先确定用户信息是否正确,再来判断密码是否正确就可以重复循环三次,将该循环人为与用户名输入进行隔离了。但是现实中可能不太适用,所以还是花了点时间想出来用字典存中间数据。
这里用到的主要内容包括条件判断,循环(如何退出循环),字典的适用(读取判断是否有key,取出value,增加key)等。

猜你喜欢

转载自www.cnblogs.com/lsl031/p/9219305.html
今日推荐