小节练习程序

编写程序, 如下有三点要求:

  1. 自定义用户信息数据结构, 写入文件, 然后读取出内容, 利用json模块进行数据的序列化和反序列化
{
    "egon":{"password":"123",'status':False,'timeout':0}, "alex":{"password":"456",'status':False,'timeout':0}, } 
  1. 定义用户类,定义方法db,例如 执行obj.db可以拿到用户数据结构
  2. 在该类中实现登录、退出方法, 登录成功将状态(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()

 

转载于:https://www.cnblogs.com/lovepy3/p/9117574.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值