• day 28


    dic = {'k':'v'}
    # 对象 : 存储属性 和调用方法
    dic['k'] = 'v'
    # class Foo:
    #     def __init__(self,name,age,sex):
    #         self.name = name
    #         self.age = age
    #         self.sex = sex
    #
    #     def __getitem__(self, item):
    #         if hasattr(self,item):
    #             return self.__dict__[item]
    #
    #     def __setitem__(self, key, value):
    #         self.__dict__[key] = value
    #
    #     def __delitem__(self, key):
    #         del self.__dict__[key]
    #
    # f = Foo('egon',38,'男')
    # print(f['name'])
    # f['hobby'] = '男'
    # print(f.hobby,f['hobby'])
    # del f.hobby      # object 原生支持  __delattr__
    # del f['hobby']   # 通过自己实现的
    # print(f.__dict__)
    
    # __init__ 初始化方法
    # __new__  构造方法 : 创建一个对象
    class A:
        def __init__(self):
            self.x = 1
            print('in init function')
        # def __new__(cls, *args, **kwargs):
        #     print('in new function')
        #     return object.__new__(A, *args, **kwargs)
    
    # a1 = A()
    # a2 = A()
    # a3 = A()
    # print(a1)
    # print(a2)
    # print(a3)
    # print(a.x)
    
    # 设计模式
    # 23种
    # 单例模式
    # 一个类 始终 只有 一个 实例
    # 当你第一次实例化这个类的时候 就创建一个实例化的对象
    # 当你之后再来实例化的时候 就用之前创建的对象
    
    # class A:
    #     __instance = False
    #     def __init__(self,name,age):
    #         self.name = name
    #         self.age = age
    #     def __new__(cls, *args, **kwargs):
    #         if cls.__instance:
    #             return cls.__instance
    #         cls.__instance = object.__new__(cls)
    #         return cls.__instance
    #
    # egon = A('egg',38)
    # egon.cloth = '小花袄'
    # nezha = A('nazha',25)
    # print(nezha)
    # print(egon)
    # print(nezha.name)
    # print(egon.name)
    # print(nezha.cloth)
    
    
    # class A:
    #     def __init__(self,name):
    #         self.name = name
    #
    #     def __eq__(self, other):
    #         if self.__dict__ == other.__dict__:
    #             return True
    #         else:
    #             return False
    #
    # ob1 = A('egon')
    # ob2 = A('egg')
    # print(ob1 == ob2)
    
    # hash()   #__hash__
    # class A:
    #     def __init__(self,name,sex):
    #         self.name = name
    #         self.sex = sex
    #     def __hash__(self):
    #         return hash(self.name+self.sex)
    #
    # a = A('egon','男')
    # b = A('egon','nv')
    # print(hash(a))
    # print(hash(b))
    import json
    from collections import namedtuple
    Card = namedtuple('Card',['rank','suit'])   # rank 牌面的大小 suit牌面的花色
    # class FranchDeck:
    #     ranks = [str(n) for n in range(2,11)] + list('JQKA')   # 2-A
    #     suits = ['红心','方板','梅花','黑桃']
    #
    #     def __init__(self):
    #         self._cards = [Card(rank,suit) for rank in FranchDeck.ranks
    #                                         for suit in FranchDeck.suits]
    #
    #     def __len__(self):
    #         return len(self._cards)
    #
    #     def __getitem__(self, item):
    #         return self._cards[item]
    #
    #     def __setitem__(self, key, value):
    #         self._cards[key] = value
    #
    #     def __str__(self):
    #         return json.dumps(self._cards,ensure_ascii=False)
    
    # deck = FranchDeck()
    # print(deck[10])
    # from random import choice
    # print(choice(deck))
    # # print(choice(deck))
    # from random import shuffle
    # shuffle(deck)
    # print(deck[10])
    # print(deck)
    # print(deck[:5])
    
    # 内置函数 内置的模块 内置的基础类型 < --- >类的内置方法
    # ==    __eq__
    # len() __len__
    
    # 100 名字 和 性别 年龄不同
    # set
    # class A:
    #     def __init__(self,name,sex,age):
    #         self.name = name
    #         self.sex = sex
    #         self.age = age
    #
    #     # def __eq__(self, other):
    #     #     if self.name == other.name and self.sex == other.sex:
    #     #         return True
    #     #     return False
    #
    #     def __hash__(self):
    #         return hash(self.name + self.sex)
    # a = A('egg','男',38)
    # b = A('egg','男',37)
    # print(set((a,b)))   # unhashable
    
    # set 依赖对象的 hash eq
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    # 登录认证
    # 加密 --> 解密
    # 摘要算法
    # 两个字符串 :
    # import hashlib   # 提供摘要算法的模块
    # md5 = hashlib.md5()
    # md5.update(b'123456')
    # print(md5.hexdigest())
    #aee949757a2e698417463d47acac93df
    
    
    # 不管算法多么不同,摘要的功能始终不变
    # 对于相同的字符串使用同一个算法进行摘要,得到的值总是不变的
    # 使用不同算法对相同的字符串进行摘要,得到的值应该不同
    # 不管使用什么算法,hashlib的方式永远不变
    
    # import hashlib   # 提供摘要算法的模块
    # sha = hashlib.md5()
    # sha.update(b'alex3714')
    # print(sha.hexdigest())
    
    # sha 算法 随着 算法复杂程度的增加 我摘要的时间成本空间成本都会增加
    
    # 摘要算法
    # 密码的密文存储
    # 文件的一致性验证
        # 在下载的时候 检查我们下载的文件和远程服务器上的文件是否一致
        # 两台机器上的两个文件 你想检查这两个文件是否相等
    
    # 用户注册
    # 用户 输入用户名
    # 用户输入 密码
    # 明文的密码进行摘要 拿到一个密文的密码
    # 写入文件
    
    # 用户的登录
    # import hashlib
    # usr = input('username :')
    # pwd = input('password : ')
    # with open('userinfo') as f:
    #     for line in f:
    #         user,passwd,role = line.split('|')
    #         md5 = hashlib.md5()
    #         md5.update(bytes(pwd,encoding='utf-8'))
    #         md5_pwd = md5.hexdigest()
    #         if usr == user and md5_pwd == passwd:
    #             print('登录成功')
    
    
    # 1234567890
    # abcdefghijk
    # 6位
    # md5
    # 撞库
    
    # 加盐
    import hashlib   # 提供摘要算法的模块
    # md5 = hashlib.md5(bytes('盐',encoding='utf-8'))
    # # md5 = hashlib.md5()
    # md5.update(b'123456')
    # print(md5.hexdigest())
    
    # 动态加盐
    # 用户名 密码
    # 使用用户名的一部分或者 直接使用整个用户名作为盐
    # import hashlib   # 提供摘要算法的模块
    # md5 = hashlib.md5(bytes('盐',encoding='utf-8')+b'')
    # # md5 = hashlib.md5()
    # md5.update(b'123456')
    # print(md5.hexdigest())
    
    #import hashilib
    # 做摘要计算的 把字节类型的内容进行摘要处理
    # md5 sha
    # md5  正常的md5算法 加盐的 动态加盐
    
    
    # 文件的一致性校验
    # 文件的一致性校验这里不需要加盐
    # import hashlib
    # md5 = hashlib.md5()
    # md5.update(b'alex')
    # md5.update(b'3714')
    # print(md5.hexdigest())
    
    # 作业: 对一个文件进行摘要算法,最后计算出这个文件的md5值。
    
    
    
    
    
    
  • 相关阅读:
    20190905-3 命令行和控制台编程
    作业要求 20181009-9 每周例行报告
    每周例行报告
    单元测试,结对
    四则运算试题生成
    代码规范,结对要求
    规格说明书-吉林市2日游
    功能测试
    每周例行报告2
    get与post请求的区别
  • 原文地址:https://www.cnblogs.com/xibanqiu/p/12845919.html
Copyright © 2020-2023  润新知