首页 > 其他 > 详细

第二次笔记

时间:2018-06-24 10:18:01      阅读:160      评论:0      收藏:0      [点我收藏+]
本次笔记就以作业来记录了

最终的脚本如下:

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

升级需求:
可以支持多个用户登录 (提示,通过列表存多个账户信息)
用户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)等。

第二次笔记

原文:https://www.cnblogs.com/lsl031/p/9219305.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!