内容回顾

  • 命名空间
  • 组合
    • 一个类的对象是另一个类对象的属性
    • 两个类之间有 什么有什么二点关系:例:班级有学生
    • 学生和课程、圆形和圆环、班级和课程
  • 计算器
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

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

      • 自己有,用自己的
      • 自己没有,用父类的
      • 自己有还想用父类的,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行

python24day的更多相关文章

随机推荐

  1. 【LeetCode】21. Merge Two Sorted Lists 合并两个有序链表

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 个人公众号:负雪明烛 本文关键词:合并,有序链表,递归,迭代,题解,leetcode, 力 ...

  2. 【LeetCode】729. My Calendar I 解题报告

    [LeetCode]729. My Calendar I 解题报告 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/problems/my-calendar- ...

  3. 关于使用JupyterNotebook运行代码运行到一半会闪退的问题

    前几个星期使用Jupyter远程使用师兄的电脑跑了一段沐老师的代码学习,但是总是跑了一段就闪退,同时因为是远程桌面,远程桌面也被挤掉了. 具体表现就是:运行代码--表现正常,打印记录--远程桌面掉线- ...

  4. 制作登录页面,点击键盘的 Enter 键或者单击“登录”按钮,验证用户输入的邮箱和密码是否正确

    查看本章节 查看作业目录 需求说明: 制作登录页面 点击键盘的 Enter 键或者单击"登录"按钮,验证用户输入的邮箱和密码是否正确 实现思路: 准备登录的静态页面 在页面中嵌入脚 ...

  5. 为什么操作dom会消耗性能

    因为对DOM的修改为影响网页的用户界面,重绘页面是一项昂贵的操作.太多的JavaScript DOM操作会导致一系列的重绘操作,为了确保执行结果的准确性,所有的修改操作是按顺序同步执行的.我们称这个过 ...

  6. TortoiseGit使用技巧

    汇总TortoiseGit使用技巧,包括提交代码,创建patch等等. 1.提交代码到本地仓库 在Git工程目录下右键, 点击 Git Commit -> "master". ...

  7. ClickHouse在监控系统中的应用

    一.背景 这个项目是一个监控系统,主要监控主机.网络设备.应用等.主机监控的数量有1500台左右,数量还在不断增长,加上网络设备和应用,目前总共监控的指标达到近40万个. 二.问题 一开始为了快速交付 ...

  8. 高可用k8s集群搭建

    虚拟机选择 Win10 Hyper-V 总体架构 三个master,三个node master的组件 etcd kube-apiserver kube-controller-manager kube- ...

  9. STL(1)vector

    STL(1) 1.vector vector是vector直译为"向量",一般说成"变长数组",也就是长度根据需要而自动改变的数组,有些题目需要开很多数组,往往 ...

  10. 龙芯发布.NET 6.0.100开发者试用版

    龙芯在龙芯开源社区发布了LoongArch64-.NET-SDK-6.0.100开发者试用版 新闻 ,龙芯.NET基于上游社区 版本 适配支持龙芯平台架构. 目前支持LoongArch64架构和MIP ...