编写程序, 如下有三点要求:
- 自定义用户信息数据结构, 写入文件, 然后读取出内容, 利用json模块进行数据的序列化和反序列化
{
"egon":{"password":"123",'status':False,'timeout':0},
"alex":{"password":"456",'status':False,'timeout':0},
}
- 定义用户类,定义方法db,例如 执行obj.db可以拿到用户数据结构
- 在该类中实现登录、退出方法, 登录成功将状态(status)修改为True, 退出将状态修改为False(退出要判断是否处于登录状态).密码输入错误三次将设置锁定时间(下次登录如果和当前时间比较大于10秒即不允许登录)
1 import json 2 import time 3 4 5 class Users: 6 def __init__(self, name, pwd): 7 self.name = name 8 self.pwd = pwd 9 self.status = "False" 10 self.timeout = 0 11 12 def js_load(self): 13 """ 14 json load,供其他方法调用. 15 :return: 16 """ 17 try: 18 with open(self.name + ".json", "r", encoding="utf-8")as f: 19 data = json.load(f) 20 return data 21 except FileNotFoundError: 22 pass 23 24 def js_dump(self, user, d_data): 25 """ 26 json dump,序列化文件,供其他方法调用. 27 :param d_data: 28 :return: 29 """ 30 with open(user + ".json", "w+", encoding="utf-8")as f: 31 json.dump(d_data, f) 32 33 @property 34 def db(self): 35 """ 36 使用property装饰器使这个方法在调用时,变成对象.属性 的形式 37 :return: 38 """ 39 self.js_load() 40 print(self.js_load()) 41 42 def save(self): 43 """ 44 保存到文件 45 :return: 46 """ 47 obj_dict = {} 48 obj_dict[self.name] = { 49 "password": self.pwd, 50 "status": self.status, 51 "timeout": self.timeout 52 } 53 self.js_dump(self.name, obj_dict) 54 55 def login(self): 56 """ 57 登陆程序. 58 :return: 59 """ 60 data = self.js_load() 61 count = 0 62 while count < 3: 63 username = input("username:").strip() 64 pwd = input("password:").strip() 65 if username in data.keys(): 66 if pwd == data[username]["password"]: 67 if data[username]["timeout"] == 0 68 or time.time() - float(data[username]["timeout"]) <= 10: 69 print(time.time() - float(data[username]["timeout"])) 70 print("登陆成功".center(30, "-")) 71 data[username]["status"] = "True" 72 self.js_dump(username, data) 73 input() 74 break 75 else: 76 print("超时,不能登录.") 77 break 78 else: 79 print("密码错误.") 80 count += 1 81 continue 82 else: 83 print("用户不存在.") 84 break 85 if count >= 3: 86 data[username]["timeout"] = time.time() 87 print(data[username]["timeout"]) 88 self.js_dump(username, data) 89 90 def u_exit(self): 91 """ 92 退出程序 93 :return: 94 """ 95 data = self.js_load() 96 if data[self.name]["status"] == "False": 97 print("用户不处于登录状态!") 98 else: 99 data[self.name]["status"] = "False" 100 self.js_dump(self.name, data) 101 print("正在调用退出接口...") 102 time.sleep(3) 103 print("再见!") 104 exit() 105 106 107 p1 = Users("jack", "abc") 108 p1.save() 109 p1.db 110 p1.login() 111 p1.u_exit()