路飞学城Python-Day21(practise)
编写程序, 如下有三点要求:
自定义用户信息数据结构, 写入文件, 然后读取出内容, 利用json模块进行数据的序列化和反序列化
e.g
{
"egon":{"password":"123",'status':False,'timeout':0},
"alex":{"password":"456",'status':False,'timeout':0},
}
定义用户类,定义方法db,例如 执行obj.db可以拿到用户数据结构
在该类中实现登录、退出方法, 登录成功将状态(status)修改为True, 退出将状态修改为False(退出要判断是否处于登录状态).\
密码输入错误三次将设置锁定时间(下次登录如果和当前时间比较大于10秒即不允许登录)

''' 有bug未及时调整 登出函数有问题 ''' import json import time def init_info(): user_if = { "egon":{"password":"123",'status':False,'timeout':0}, "alex":{"password":"456",'status':False,'timeout':0}, } with open('user_info','w',encoding='utf-8') as f: json.dump(user_if,f) def read_info(): with open('user_info','r+',encoding='utf-8') as f: print(json.load(f,encoding = 'utf-8')) user_name = '' class User: def db(self): ''' db方法:调用时打印当前用户信息和信息存储数据格式 :return: ''' with open('user_info', 'r+', encoding='utf-8') as f: user_info = json.load(f, encoding='utf-8') for k, v in user_info.items(): print('username:%s -' % k, type(k), 'password:',[val for val in v.values()][0], type([val for val in v.values()][0]), 'status:',[val for val in v.values()][1], type([val for val in v.values()][1]), 'timeout:', [val for val in v.values()][2], type([val for val in v.values()][2]), ) def login(self): ''' 登录 登录成功将状态(status)修改为True 密码输入错误三次将设置锁定时间(下次登录如果和当前时间比较大于10秒即不允许登录)[个人理解应该是10秒内不能登录,这里的表述有问题] :return: ''' count = 0 while count < 3: username = input('请输入用户名>>>').strip() password = input('请输入密码>>>').strip() with open('user_info', 'r+', encoding='utf-8') as f: user_info = json.load(f, encoding='utf-8') user_name_list = [] for k in user_info.keys(): user_name_list.append(k) if username in user_name_list and password == user_info.get(username)['password']: if user_info.get(username)['timeout'] - time.time()<0: user_info.get(username)['status'] = True print('用户:%s 登陆成功' % username) user_dict = {username:user_info.get(username)} user_name = username with open('user_info','w+',encoding='utf-8') as f: json.dump(user_info, f) return user_dict[username] else: return '用户账号已锁定!' elif count == 2: if username in user_name_list: user_info.get(username)['timeout'] = time.time()+10 with open('user_info','w+',encoding='utf-8') as f: json.dump(user_info, f) return '%s账户已锁定'%username else: return '用户名不存在!' else: print('账号或密码错误,还有%s次尝试机会'% (3-(count+1))) count += 1 def logout(self): ''' 退出将状态修改为False(退出要判断是否处于登录状态) :return: ''' with open('user_info', 'r+', encoding='utf-8') as f: user_info = json.load(f, encoding='utf-8') user_list = [] for k in user_info.keys(): user_list.append(k) if user_name in user_list: print('当前登录账户%s'%user_name) choice = input('请确认是否退出,是:Y 否:N').strip() if choice == 'y'.upper() or choice == 'y'.lower(): user_info.get(user_name)['status'] = False with open('user_info', 'w+', encoding='utf-8') as f: json.dump(user_info, f) else: pass else: pass us = User() # us.db() u = us.login()
Win a contest, win a challenge
posted on 2018-07-19 06:39 pandaboy1123 阅读(352) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南