路飞学城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秒即不允许登录)
import json

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'))


class User:
    # user_dict = {}
    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:%s',[val for val in v.values()][0], type([val for val in v.values()][0]),
                      'status:%s',[val for val in v.values()][1], type([val for val in v.values()][1]),
                      'timeout:%s', [val for val in v.values()][2], type([val for val in v.values()][2]),
                      )

    def login(self):
        '''
        登录
        登录成功将状态(status)修改为True
        密码输入错误三次将设置锁定时间(下次登录如果和当前时间比较大于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']:
                    user_info.get(username)['status'] = True
                    print('用户:%s 登陆成功' % user_info[username])
                    with open('user_info','w+',encoding='utf-8') as f1:
                        json.dump(user_info, f1)
                    break
                else:
                    print('账号或密码错误,还有%s次尝试机会'% (3-(count+1)))
                    count += 1

    def logout(self):
        '''
        退出将状态修改为False(退出要判断是否处于登录状态)
        :return:
        '''
        pass


us = User()
us.db()
us.login()
View Code


猜你喜欢

转载自www.cnblogs.com/pandaboy1123/p/9333745.html