zoukankan      html  css  js  c++  java
  • python24day

    内容回顾

    • 命名空间
    • 组合
      • 一个类的对象是另一个类对象的属性
      • 两个类之间有 什么有什么二点关系:例:班级有学生
      • 学生和课程、圆形和圆环、班级和课程
    • 计算器
    from functools import reduce
    
    #格式整理
    def exp_fmt(exp):
        while re.search('[+-]{2,}',exp):
            exp.replace('--','+')
            exp.replace('+-','-')
            exp.replace('-+','-')
            exp.replace('++','+')
            return exp
    
    #计算两个数的乘法或除法
    def mul_div(exp):
        #'3*4','5/6'
        if '*' in exp:
            a,b=exp.split('*')
            return float(a) * float(b)
        if '/' in exp:
            a, b = exp.split('/')
            return float(a) / float(b)
    
    
    
    #计算表达式中所有加减法
    def remove_addsub(exp):
        ret=re.findall('[-+]?d+(?:.d+)?',exp)
        # count=0
        # for i in ret:
        #     count+=float(i)
        # print(count)
        res=reduce(lambda a,b:float(a)+float(b),ret)
        return res
    
    #计算表达式中的所有乘除法
    import re
    def remove_muldiv(exp):
        while True:
            ret=re.search('d+(.d+)?[*/]-?d+(.d+)?',exp)
            if ret:
                son_exp=ret.group()
                print([son_exp])
                res=mul_div(son_exp)
                print(res)
                exp=exp.replace(son_exp,str(res))
                print('-->',exp) #1+12.0*5/6
            else:
                break
        return exp
    
    
    #计算乘除法
    ret=remove_muldiv('1+3*4*5/6')
    print(ret)
    #计算加减法
    exp='1+2.238-++317+-428-5+6'
    exp=exp_fmt(exp)
    ret=remove_addsub(exp)
    print(ret)
    
    # 下一步
    # 计算加减乘除四则运算的表达式
    # 并去括号
    

    今日内容

    • 面向对象三大特性:

      • 继承
      • 封装
      • 多态
    • 继承

      # 猫:
      #    吃
      #    喝
      #    睡
      #    爬树
      # 狗:
      #    吃
      #    喝
      #    睡
      #    看家
      class Cat:
          def __init__(self,name):
              self.name=name
          def eat(self):
              print('%s eat'%self.name)
          def drink(self):
              print('%s drink'%self.name)
          def sleep(self):
              print('%s sleep'%self.name)
          def climb(self):
              print('%s climb'%self.name)
      
      
      class Dog:
          def __init__(self, name):
              self.name = name
          def eat(self):
              print('%s eat' % self.name)
          def drink(self):
              print('%s drink' % self.name)
          def sleep(self):
              print('%s sleep' % self.name)
          def house_keep(self):
              print('%s house_keep' % self.name)
      
      #上面两个类有重叠部分
      
      小白=Cat('小白')
      小白.eat()
      小白.drink()
      小白.sleep()
      小白.climb()
      
      小黑=Dog('小黑')
      小黑.eat()
      小黑.drink()
      小黑.sleep()
      小黑.house_keep()
      
      #继承----需要解决代码的重复
      #继承语法:
      class A:
          pass
      class B(A):
          pass
      #B继承A,A是父类,B是子类
      #A是父类、基类、超类
      #B是子类、派生类
      
      #对于上述猫狗的代码,可以定义一个父类,把重复的放在父类
      class Animal:
          def __init__(self, name):
              self.name = name
          def eat(self):
              print('%s eat' % self.name)
          def drink(self):
              print('%s drink' % self.name)
          def sleep(self):
              print('%s sleep' % self.name)
      
      class Cat(Animal):
          def climb(self):
              print('%s climb'%self.name)
      
      class Dog(Animal):
          def house_keep(self):
              print('%s house_keep' % self.name)
      

      子类可以使用父类中的方法

      子类和父类中有相同方法时,会优先从自己的类空间找方法,即只使用子类的方法。

      • 有时,子类想要调用父类方法的同时,还想要执行自己的同名方法。

        • 在自己的eat方法中调用父类的方法,此时self.eat应改为Animal.eat

        image-20200704121541780

      • 父类和子类方法的选择:

        • 自己有,用自己的
        • 自己没有,用父类的
        • 自己有还想用父类的,self换成父类名
    • 多继承:有好几个爹(java不支持多继承,py支持)

    内容补充

    • object类 类祖宗
      所有在python3中的类,都是继承object类的
      object中有init
      所有的类都默认继承object

    • 类中的绑定方法和普通函数

      • 类调用函数是普通函数:A.eat()
      • 对象调用函数是绑定方法:a.eat()
    • 类中很有必要添加注释,写在类的开头或函数的开头

    • pickle

      #pickle
      class Course:
          def __init__(self,name,period,price):
              self.name=name
              self.period=period
              self.price=price
      
      # python=Course('python','6 month',21800)
      import pickle
      # with open('pickle_file',mode='wb')as f:
      #     pickle.dump(python,f)
      with open('pickle_file','rb')as f:
          while True:
              try:
                  #可迭代取内容
                  python=pickle.load(f)
                  print(python.name)
                  print(python.price)
      

    明日学习

    队列、栈、多继承等

    代码总行数2538+164=2702行

  • 相关阅读:
    leetcode整理(一)
    day02 整理
    python从入门到放弃之守护进程
    python从入门到放弃之进程
    基于hashlib下的文件校验
    hashlib(hmac)进阶之client跟server交互
    hashlib以及hmac的日常应用
    python从入门到放弃
    6.redis 的持久化有哪几种方式?不同的持久化机制都有什么优缺点?持久化机制具体底层是如何实现的?
    5.如何保证 redis 的高并发和高可用?redis 的主从复制原理能介绍一下么?redis 的哨兵原理能介绍一下么?
  • 原文地址:https://www.cnblogs.com/CodeForWorld/p/13234662.html
Copyright © 2011-2022 走看看