当前位置: 首页 > news >正文

python---面向对象---综合案例(4)

案例描述

实现加减乘法运算

# _*_ encoding:utf-8 _*_# 计算器, 实现一些基本的操作, 加减乘除运算, 以及打印结果操作# ------------------------------------代码1--------------------------------------
def jia(n1, n2):return n1 + n2def jian(n1, n2):return n1 - n2def cheng(n1, n2):return n1 * n2res = jia(2, 4)
res2 = cheng(5, 7)
print(res)
print(res2)#(2 + 6 - 4) * 5
r1 = jia(2, 6)
r2 = jian(r1, 4)
r3 = cheng(r2, 5)
print(r3)# ------------------------------------代码2--------------------------------------
result = 0def first_value(v):global resultresult = vdef jia(n):global resultresult += ndef jian(n):global resultresult -= ndef cheng(n):global resultresult *= nfirst_value(2)
jia(6)
result = 123
jian(4)
cheng(5)
print(result)# ------------------------------------代码3--------------------------------------
## 封装到类,提高安全性
class Caculator:__result = 0@classmethoddef first_value(cls, v):cls.__result = v@classmethoddef jia(cls, n):cls.__result += n@classmethoddef jian(cls, n):cls.__result -= n@classmethoddef cheng(cls, n):cls.__result *= n@classmethoddef show(cls):print("计算的结果是:%d" % cls.__result)Caculator.first_value(2)Caculator.jia(6)
Caculator.jian(4)
Caculator.cheng(5)
Caculator.show()# ------------------------------------代码4--------------------------------------
## 增加并发功能
class Caculator:def __init__(self, num):self.__result = numdef jia(self, n):self.__result += ndef jian(self, n):self.__result -= ndef cheng(self, n):self.__result *= ndef show(self):print("计算的结果是:%d" % self.__result)
# 创建计算器
c1 = Caculator(2)
# 运算
c1.jia(6)
c1.jian(4)
c1.cheng(5)
c1.show()# ------------------------------------代码5--------------------------------------
## 容错处理,数据验证
class Caculator:def check_num(self, num):if not isinstance(num, int):raise TypeError("当前这个数据的类型有问题, 应该是一个整型数据")def __init__(self, num):self.check_num(num)self.__result = numdef jia(self, n):self.check_num(n)self.__result += ndef jian(self, n):self.check_num(n)self.__result -= ndef cheng(self, n):self.check_num(n)self.__result *= ndef show(self):print("计算的结果是:%d" % self.__result)c1 = Caculator(2)
c1.jia(6)
c1.jian("a")
c1.cheng(5)
c1.show()# ------------------------------------代码6--------------------------------------
# 使用装饰器进行优化重构,维护代码的完整性
class Caculator:def check_num_zsq(func):def inner(self, n):if not isinstance(n, int):raise TypeError("当前这个数据的类型有问题, 应该是一个整型数据")return func(self, n)return inner@check_num_zsqdef __init__(self, num):self.__result = num@check_num_zsqdef jia(self, n):self.__result += n@check_num_zsqdef jian(self, n):self.__result -= n@check_num_zsqdef cheng(self, n):self.__result *= ndef show(self):print("计算的结果是:%d" % self.__result)c1 = Caculator(2)
c1.jia(6)
c1.jian(4)
c1.cheng(5)
c1.show()# ------------------------------------代码7--------------------------------------
# 实例调用类中的装饰器会报错,将装饰器设为私有
class Caculator:def __check_num_zsq(func):def inner(self, n):if not isinstance(n, int):raise TypeError("当前这个数据的类型有问题, 应该是一个整型数据")return func(self, n)return inner@__check_num_zsqdef __init__(self, num):self.__result = num@__check_num_zsqdef jia(self, n):self.__result += n@__check_num_zsqdef jian(self, n):self.__result -= n@__check_num_zsqdef cheng(self, n):self.__result *= ndef show(self):print("计算的结果是:%d" % self.__result)c1 = Caculator(2)
c1.jia(6)
c1.jian(4)
c1.cheng(5)
c1.show()# ------------------------------------代码8--------------------------------------
# 针对用户的每个操作,进行语音播报,类似开启语音播报的计算器import win32com.clientclass Caculator:def __check_num_zsq(func):def inner(self, n):if not isinstance(n, int):raise TypeError("当前这个数据的类型有问题, 应该是一个整型数据")return func(self, n)return innerdef __say(self, word):# 1. 创建一个播报器对象speaker = win32com.client.Dispatch("SAPI.SpVoice")# 2. 通过这个播报器对象, 直接, 播放相对应的语音字符串就可以speaker.Speak(word)def create_say_zsq(word=""):def __say_zsq(func):def inner(self, n):# 1. 创建一个播报器对象speaker = win32com.client.Dispatch("SAPI.SpVoice")# 2. 通过这个播报器对象, 直接, 播放相对应的语音字符串就可以speaker.Speak(word + str(n))return func(self, n)return innerreturn __say_zsq@__check_num_zsq@create_say_zsq()def __init__(self, num):self.__result = num@__check_num_zsq@create_say_zsq("加")def jia(self, n):self.__result += n@__check_num_zsq@create_say_zsq("减去")def jian(self, n):self.__result -= n@__check_num_zsq@create_say_zsq("乘以")def cheng(self, n):self.__result *= ndef show(self):self.__say("计算的结果是:%d" % self.__result)print("计算的结果是:%d" % self.__result)c1 = Caculator(10)
c1.jia(6)
c1.jian(4)
c1.cheng(5)
c1.show()# ------------------------------------代码9--------------------------------------
# 播报优化
import win32com.clientclass Caculator:def __check_num_zsq(func):def inner(self, n):if not isinstance(n, int):raise TypeError("当前这个数据的类型有问题, 应该是一个整型数据")return func(self, n)return innerdef __say(self, word):# 1. 创建一个播报器对象speaker = win32com.client.Dispatch("SAPI.SpVoice")# 2. 通过这个播报器对象, 直接, 播放相对应的语音字符串就可以speaker.Speak(word)def __create_say_zsq(word=""):def __say_zsq(func):def inner(self, n):self.__say(word + str(n))return func(self, n)return innerreturn __say_zsq@__check_num_zsq@__create_say_zsq()def __init__(self, num):self.__result = num@__check_num_zsq@__create_say_zsq("加")def jia(self, n):self.__result += n@__check_num_zsq@__create_say_zsq("减去")def jian(self, n):self.__result -= n@__check_num_zsq@__create_say_zsq("乘以")def cheng(self, n):self.__result *= ndef show(self):self.__say("计算的结果是:%d" % self.__result)print("计算的结果是:%d" % self.__result)c1 = Caculator(10)
c1.jia(6)
c1.jian(4)
c1.cheng(5)
c1.show()# ------------------------------------代码10--------------------------------------
import win32com.clientclass Caculator:def __check_num_zsq(func):def inner(self, n):if not isinstance(n, int):raise TypeError("当前这个数据的类型有问题, 应该是一个整型数据")return func(self, n)return innerdef __say(self, word):# 1. 创建一个播报器对象speaker = win32com.client.Dispatch("SAPI.SpVoice")# 2. 通过这个播报器对象, 直接, 播放相对应的语音字符串就可以speaker.Speak(word)def __create_say_zsq(word=""):def __say_zsq(func):def inner(self, n):self.__say(word + str(n))return func(self, n)return innerreturn __say_zsq@__check_num_zsq@__create_say_zsq()def __init__(self, num):self.__result = num@__check_num_zsq@__create_say_zsq("加")def jia(self, n):self.__result += n@__check_num_zsq@__create_say_zsq("减去")def jian(self, n):self.__result -= n@__check_num_zsq@__create_say_zsq("乘以")def cheng(self, n):self.__result *= ndef show(self):self.__say("计算的结果是:%d" % self.__result)print("计算的结果是:%d" % self.__result)@propertydef result(self):return self.__resultc1 = Caculator(10)
c1.jia(6)
c1.jian(4)
c1.cheng(5)
c1.show()print(c1.result)
c1.result = 10# ------------------------------------代码11--------------------------------------
import win32com.clientclass Caculator:def __check_num_zsq(func):def inner(self, n):if not isinstance(n, int):raise TypeError("当前这个数据的类型有问题, 应该是一个整型数据")return func(self, n)return innerdef __say(self, word):# 1. 创建一个播报器对象speaker = win32com.client.Dispatch("SAPI.SpVoice")# 2. 通过这个播报器对象, 直接, 播放相对应的语音字符串就可以speaker.Speak(word)def __create_say_zsq(word=""):def __say_zsq(func):def inner(self, n):self.__say(word + str(n))return func(self, n)return innerreturn __say_zsq@__check_num_zsq@__create_say_zsq()def __init__(self, num):self.__result = num@__check_num_zsq@__create_say_zsq("加")def jia(self, n):self.__result += nreturn self@__check_num_zsq@__create_say_zsq("减去")def jian(self, n):self.__result -= nreturn self@__check_num_zsq@__create_say_zsq("乘以")def cheng(self, n):self.__result *= nreturn selfdef show(self):self.__say("计算的结果是:%d" % self.__result)print("计算的结果是:%d" % self.__result)return selfdef clear(self):self.__result = 0return self@propertydef result(self):return self.__resultc1 = Caculator(10)
c1.jia(6).jian(4).cheng(5).show().clear().jia(555).jian(500).show() # 链式编程,在方法内部再次返回调用方法的实例本身print(c1.result)# ------------------------------------代码12--------------------------------------import win32com.clientclass Caculator(object):@staticmethoddef __say(word):speaker = win32com.client.Dispatch("SAPI.SpVoice")speaker.Speak(word)def createSayZSQ(operation=""):def say(func):def inner(self, v):Caculator.__say(operation + str(v))return func(self, v)return innerreturn saydef __check_num(func):def inner(self, v):if not isinstance(v, int):raise TypeError("数据类型有误, 应该是一个整型数据")return func(self, v)return inner@createSayZSQ()@__check_numdef __init__(self, v):self.__result = v@createSayZSQ("加")@__check_numdef jia(self, n):self.__result += nreturn self@createSayZSQ("减")@__check_numdef jian(self, n):self.__result -= nreturn self@createSayZSQ("乘")@__check_numdef cheng(self, n):self.__result *= nreturn selfdef show(self):self.__say("计算结果为:%d" % self.__result)print("计算结果为:%d" % self.__result)return selfc = Caculator(2)
c.jia(6).jian(4).cheng(3).show()

补充

使用Python调用微软的语音接口import win32com.clientspeaker = win32com.client.Dispatch("SAPI.SpVoice")speaker.Speak(word)
http://www.lryc.cn/news/496689.html

相关文章:

  • 如何参加华为欧拉考试?
  • 算法预刷题Day9:BM28 二叉树的最大深度
  • exp_lr_scheduler理解
  • Algorithm:河内之塔
  • 集中管理与实时审计:构建Linux集群(1300台服务器)日志平台的最佳实践
  • 在Scala中Array不可变的学习
  • vue3+vite 批量引入组件动态使用
  • 设计模式——方法链or流式接口
  • JAVA OPCUA 服务端开发,客户端连接会话监听和订阅事件监听
  • pytest相关总结
  • cin/cout的性能优化和缓冲区同步问题
  • redisson-spring-data与Spring-Data-Redis的版本关系问题
  • Puppeteer代理认证的最佳实践和示例
  • js 字符串 只显示数字
  • STM32标准库-FLASH
  • PowerShell:查找并关闭打开的文件
  • 【AI系统】昇腾异构计算架构 CANN
  • STM32 HAL库开发学习3.STM32启动浅析
  • FakeLocation 1.3.5 BETA 提示校园跑漏洞修复解决
  • Figma入门-约束与对齐
  • 腾讯元宝深度搜索AI多线程批量生成TXT原创文章软件
  • Git操作学习1
  • 【计算机网络】细说IP
  • 树与图深度优先遍历——acwing
  • vue3.0 根据富文本html页面生成压缩包(含视频在线地址、图片在线地址、前端截图、前端文档)
  • WPF+LibVLC开发播放器-LibVLC在C#中的使用
  • 消息中间件-Kafka1-实现原理
  • 2023年华数杯数学建模B题不透明制品最优配色方案设计解题全过程文档及程序
  • Mysql事务常见面试题 -- 事务的特性 ,并发事务问题 , undo_log和redo_log , 分布式事务
  • 【数据库系列】Spring Boot如何配置Flyway的回调函数