编写程序,满足以下三点要求: 自定义用户信息数据结构, 先新建.json文件,再把数据写入文件,然后读取出内容,利用json模块进行数据的序列化和反序列化。

编写程序,满足以下三点要求:

自定义用户信息数据结构, 先新建.json文件,再把数据写入文件,然后读取出内容,利用json模块进行数据的序列化和反序列化。
数据结构例如:

{ “egon”:{“password”:“123”,‘status’:False,‘timeout’:0}, “alex”:{“password”:“456”,‘status’:False,‘timeout’:0}, }

#序列化可以理解为  :把python的对象编码转换为json格式的字符串  python     ---> json  dump
#反序列化可以理解为:把json格式字符串解码为python数据对象      json字符串 ---> python数据对象.  load
 
import json
 
# Python 字典类型转换为 JSON 对象
data = { "egon":{"password":"123",'status':False,'timeout':0}, "alex":{"password":"456",'status':False,'timeout':0}, }


#print(type(data))

with open('data.json', 'w') as f:
    json.dump(data, f)
json_str = json.dumps(data)     #序列化
#print ("Python 原始数据:", repr(data))
#print (json_str)
with open('data.json', 'r') as f:
    data = json.load(f)# 反序列化
    print(data)

定义用户类,定义方法db,例如 执行obj.db可以拿到用户数据结构。

import json
class User:
    def __init__(self):
        self.user_dic=self.f_xuliehua()#读取信息
        self.name=''
    def  xuliehua(self):
        with open('data.json', 'w') as f:
            json.dump(data, f)
    def f_xuliehua(self):
        with open('data.json','r') as f:
            user_dic=json.load(f)
            return user_dic
    def db(self):
        print(self.user_dic)
u=User()
u.db()

在该类中实现登录、退出方法,登录成功将状态(status)修改为True,退出将状态修改为False(退出要判断是否处于登录状态)。密码输入错误三次将设置锁定时间(下次登录如果和当前时间比较大于10秒即不允许登录)。

import time
import json
data = {"egon":{"password":"123",'status':False,'timeout':0},"alex":{"password":"456",'status':False,'timeout':0}, }
with open("data.json", "w") as f:
    json.dump(data, f)  # 序列化
class User:
    def __init__(self):
        self.user_dic=self.f_xuliehua()#读取信息
        self.name=""
    def  xuliehua(self):
        with open('data.json', 'w') as f:
            json.dump(self.user_dic, f)
    def f_xuliehua(self):
        with open('data.json','r') as f:
            user_dic=json.load(f)
            return user_dic
    def db(self):
        print(self.user_dic)
    def login(self):
        while True:
            a=input("请输入命令\n")
            print("输入的命令为:",a)
            if a=="q":#退出程序不然停不下来很烦
                print("退出程序")
                break
            count=0
            while a=="login":
                username=input("请输入用户名:\n")
                print("输入的用户名为",username)
                password=input("请输入密码:\n")
                print("输入的密码为",password)
                if username in self.user_dic and password == self.user_dic[username]["password"]:#判断输入的值是否在json文件中
                    time_now = time.time()  # 获取当前时间
                    period = time_now - self.user_dic[username]["timeout"]  # 时间差
                    if period >= 10:  
                        print("-----------------%s登录成功-----------------"%username)
                        self.username = username
                        self.user_dic[username]["status"] = True  # 记录用户登录状态
                        self.xuliehua()
                        break
                    else:
                        print("用户处于锁定状态,请{}S后再试" .format(10 - period))
                        break
                else:
                    print("用户或密码错误")
                    count=count+1
                    if count>=3:
                        print("---------%s用户已经被锁定--------"%username)
                        break
            while a=="exit":
                try:
                    if self.username:  # 用户处于登录状态
                        self.user_dic[self.username]["status"] = False  # 修改用户登录状态
                        self.xuliehua ()  # 将修改保存到文件
                        print("用户{}退出登录" .format(self.username))
                        break
                except:
                    print("当前没有用户登录")
                    break
            

                    

u=User()
u.login()
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值