10月14日学习总结

一、Python异常处理机制

代码本身即便没有问题,但在运行时可能因为外部环境或资源的问题,
导致代码无法运行,程序出现异常状况 ,如果异常状况没有得到处理,那么程序就会
崩溃,具体的表现就是代码直接停止运行。如果不希望程序崩溃,就有对代码进行异常
状况的处理,在Python中,可以使用try语法将可能出现状况的代码保护起来执行,在
出现状况的时候,使用except进行异常状况捕获并给出相应的处理

import timewhile True:# 用try把可能常出现异常状况的代码保护起来执行try:with open('readme.txt',encoding='utf-8') as file:print(file.read())break# 如果程序运行没有发生状况,except都不会执行except FileNotFoundError:# 对号入座:如果文件找不到,此处会进行异常捕获 except FileNotFoundError as err:将异常别名为err,通过err对象就可以获取关于异常的各种信息print('错误提示:文件不存在,5秒后重新尝试读取文件')time.sleep(5)except IOError:# 对号入座:如果是读文件发生了问题,此处会进行异常捕获print('错误提示:读取文件失败,请确认文件是否就绪')sys.exit(1)except Exception:# 前面两种都没能对号入座,在此处进行异常捕获,大部分的异常都是Exception的子类型print('错误提示:程序发生了一点小问题,请拨打110寻求帮助')# 实际项目中,这里要通过日志记录问题,可能还会通过网络将异常信息反馈给开发者(需要网络支持)sys.exit(1)finally:# 实际项目中,此处通常用来释放外部资源(例如网络链接,数据库链接等)因为这里的代码在任何情况下一定会被执行到,我们把这里成为总是执行代码print('这个地方最适合释放外部资源!!!')print('程序结束')

二. 面对象编程进阶

# def gcd(x,y):
#     for i in range(min(x,y),1,-1):
#         if x % i == 0 and y % i == 0:
#             return i
#     return 1def gcd(x, y):"""求最大公约数"""while y % x != 0:x, y = y % x, xreturn x# 通过继承Exception自定义异常类型
class FractionException(Exception):  # 自定义异常类型通常都是继承Exception类或者它的子类pass  # 自定义异常类型通常也不需要写什么代码,主要就是定义一种新的自定义的类型来标记特殊的异常状况,代码直接复用Exception的代码class Fraction:"""分数"""@classmethoddef from_value(cls, value: float):return cls(int(value * 10000), 10000)@classmethoddef from_string(cls, string: str):# num, den = map(int,map(str.strip,string.split('/')))# num, den = [int(item.strip()) for item in string.split('/')]return cls(*[int(item.strip()) for item in string.split('/')])def __init__(self, num, den):# 如果分母为0,直接引发异常让程序崩溃if den == 0:raise FractionException('分母不能为0')  # 通过raise关键字,后面跟上异常对象来引发异常,如果使用这个代码的人没有做异常处理,那么程序就会在这个地方崩溃self.num = numself.den = denself.normalize()self.simplify()def __str__(self):if self.den == 1:return f'{self.num}'return f'{self.num}/{self.den}'def __add__(self, other):num = self.num * other.den + self.den * other.numden = self.den * other.denreturn Fraction(num, den)def __sub__(self, other):num = self.num * other.den - self.den * other.numden = self.den * other.denreturn Fraction(num, den)def __mul__(self, other):num = self.num * other.numden = self.den * other.denreturn Fraction(num, den)def __truediv__(self, other):num = self.num * other.denden = self.den * other.numreturn Fraction(num, den)@propertydef value(self):  # 计算属性:通过对象现有的属性运算都得到的一个值,本来是一个方法,但是我们可以通过添加@property装饰器,将它处理成属性return self.num / self.dendef simplify(self):"""化简"""if self.num != 0:factor = gcd(abs(self.num), abs(self.den))self.num, self.den = self.num // factor, self.den // factorreturn selfdef normalize(self):"""规范化"""if self.num == 0:self.den = 1if self.den < 0:self.num = -self.numself.den = -self.denreturn selff1 = Fraction.from_string('5/8')
f2 = Fraction.from_value(0.33)
print(f1)
print(f2)f3 = f1 + f2
f4 = f1 - f2
f5 = f1 * f2
f6 = f1 / f2
print(f3)
print(f4)
print(f5)
print(f6.value)

三、多态

"""
example06 - 工资结算系统公司有三类员工,结算工资的方式是不一样的:
- 部门经理:15000元
- 程序员 --->计算工时--->200元/小时
- 销售员 --->底薪+提成 --->1800元 + 销售额5%提成给出员工的信息,自动结算月薪override ---> 重写/覆盖/置换 ---> 子类将父类已有的方法重新实现一遍子类可以重写父类的方法,不同的子类可以对一个方法给出不用的实现版本
多态 - 不同的对象(部门经理、销售员、程序员)接收到相同的消息(get_salary)做了不同的事(每种员工结算月薪的方式不一样)employee employer salary manager programmer salesman
"""
from abc import ABCMeta, abstractmethodclass Employee(metaclass=ABCMeta):"""员工"""def __init__(self, name):self.name = name@abstractmethoddef get_salary(self):passclass Manager(Employee):"""部门经理"""def get_salary(self):return 15000.0class Programmer(Employee):"""程序员"""def __init__(self, name):super().__init__(name)self.working_hour = 0def get_salary(self):return 200 * self.working_hourclass Salesman(Employee):"""销售员"""def __init__(self, name):super().__init__(name)self.sales = 0.0def get_salary(self):return 1800 + self.sales * 0.05def main():  # 要实现多态,最重要的一步就是方法重写,子类重写父类已有的方法,emps = [Manager('王博杨'), Programmer('王浩宇'), Programmer('曹操'),Salesman('貂蝉'), Salesman('代吉'), Programmer('罗昊')]for emp in emps:if type(emp) == Programmer:emp.working_hour = int(input(f'请输入{emp.name}本月工作时间: '))elif type(emp) == Salesman:emp.sales = float(input(f'请输入{emp.name}本月销售额: '))print(f'{emp.name}本月工资为:{emp.get_salary():.2f}元')if __name__ == '__main__':main()

10月14日学习总结相关推荐

  1. Silverlight/Windows8/WPF/WP7/HTML5周学习导读(10月1日-10月14日)

    Silverlight/Windows8/WPF/WP7/HTML5周学习导读(10月1日-10月14日) 本周Silverlight学习资源更新 Silverlight 自定义 ScrollView ...

  2. 寻仙服务器维护到几点,寻仙10月14日上午服务器例行维护公告

    尊敬的寻仙用户: 为保证服务器的稳定运行,提高游戏品质,我们将于2008年10月14日(周二)对全服停机,进行临时维护工作.根据维护工作的进度,停机结束时间有可能提前或者延后,请各位玩家相互转告.为此 ...

  3. visual studio 没有属性页_驯龙物语10月14日更新|新增快捷购买页签

    更新公告 大家好,我是小白龙,很高兴又与大家见面啦!维利克洛大陆又迎来了新内容,守护者们要仔细阅读看到最后喔! 更新时间 本次更新于10月14日6:00-7:00进行,视更新进度可能提前开服或顺延,各 ...

  4. python 判断该地址 文件创建时间2020年10月14日14时25分32秒 文件最后一次访问时间 文件最后一次修改时间

    #1.判断该地址 #1.文件名 #2.文件路径 #3.文件扩展名 #4.文件创建时间2020年10月14日14时25分32秒 #5.文件最后一次访问时间 #6.文件最后一次修改时间 #7.文件的大小( ...

  5. 一加将于10月14日推出新款Buds系列真无线耳塞

    10月4日消息,日前,一加官方正式对外宣布,将于10月14日和一加8T一起,推出新款Buds系列真无线耳塞,至于具体细节目前还未透露. 据了解,首款一加Buds于7月21日发布,配备13.4mm动态驱 ...

  6. Pycharm Professional Edition 激活码(license),有效期至2018年10月14日

    Pycharm Professional Edition 激活码(license)(Yep, 请复制以下全部内容) EB101IWSWD-eyJsaWNlbnNlSWQiOiJFQjEwMUlXU1d ...

  7. 【转】为什么SPSS的日期要以1582年10月14日为基准

    为什么在SPSS的时间运算总是与1582年10月14日24:00:00(10月15日0:00:00)有关,即日期型数据转换成以这个时间点为起始点的秒数? 在现在通行的历法记载上,全世界居然有十天没有任 ...

  8. 为什么SPSS的日期要以1582年10月14日为基准

    为什么在SPSS的时间运算总是与1582年10月14日24:00:00(10月15日0:00:00)有关,即日期型数据转换成以这个时间点为起始点的秒数? 在现在通行的历法记载上,全世界居然有十天没有任 ...

  9. hotmail邮箱设置【2018年10月14日】

    hotmail邮箱设置[2018年10月14日] POP setting Server name: outlook.office365.com Port: 995 Encryption method: ...

最新文章

  1. 网站服务器基本防范配置
  2. Delphi常用关键字用法详解
  3. 简单计算器 (关于栈的一种应用)
  4. LeetCode MySQL 574. 当选者
  5. Linux中使用Systemtap调试SLUB
  6. C#下载文件和将文件转换为数据流下载的示例
  7. 【报告分享】美好城市指数:短视频与城市繁荣关系白皮书.pdf(附下载链接)...
  8. java操作字节码_操作Java字节码
  9. HDU5479 Colmerauer 单调栈+暴力优化
  10. matlab 多属性权重,多属性决策的权重确定方法及matlab 程序
  11. 一种用于决策(decision-making)的系统架构
  12. windows内核情景分析--窗口消息
  13. 图形学初步----------多边形填充算法
  14. 做自己喜欢做的事,需要勇气,也需要能力
  15. Tablespace free space
  16. 基于 MATLAB fitcsvm 的 OVR SVM 多分类器实现
  17. 去雾模块dehaze.py(可直接调用)
  18. succi -测手速游戏
  19. 【MySQL 8.0 OCP 1Z0-908认证考试】 题库精讲--第二讲mysql主从
  20. java课程设计连连看_连连看_java课程设计报告

热门文章

  1. 基于ssm的仓库进销存管理系统的设计开发作品欣赏
  2. 亿级流量电商详情页系统实战-46.基于双层嵌套command开发商品服务接口的多级降级机制
  3. python3 translate---TypeError: translate() takes exactly one argument (2 given)
  4. Demo-2(豆瓣)
  5. 51单片机按键控制流水灯
  6. windows 关闭简体繁体转换
  7. 渐变边框小型研究(如果做出一个颜色渐变、宽度渐变的边框)
  8. 手把手教你:【史上最全】C++开发环境搭建:win732位下VS2010+Boost_1_53_0+Qt5.2+MySql搭建
  9. C语言实现电子辞典(电子词典)
  10. 子元素设置position:fixed,z-index大于父元素依然被父元素盖住