zoukankan      html  css  js  c++  java
  • 小节练习程序

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

    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()
  • 相关阅读:
    u盘的超级用法
    文件夹访问被拒绝
    web移动前端的click点透问题
    call()apply()ind()备忘录
    Safari中的new Date()格式化坑
    dataURI V.S. CSS Sprites 移动端
    css3属性之 box-sizing
    多人协作代码--公共库的引用与业务约定
    web前端本地测试方法
    依赖包拼合方法
  • 原文地址:https://www.cnblogs.com/lovepy3/p/9117574.html
Copyright © 2011-2022 走看看