面向对象编程-综合案例

# 计算器,实现一些基本的操作,加减乘除,以及打印结果操作

# --------------------------------------------------------代码1---------------------------------------------------------

# def jia(n1, n2):
#     return n1 + n2
#
# def jian(n1, n2):
#     return n1 - n2
#
# def cheng(n1, n2):
#     return n1 * n2
#
# def chu(n1, n2):
#     return n1 / n2
#
# res = chu(1, 4)
# print(res)
#
# # 计算 2 + 6 - 4 * 5
#
# r1 = jia(2, 6)
# r2 = jian(r1, 4)
# r3 = cheng(r2, 5)
# print(r3)

# --------------------------------------------------------代码2---------------------------------------------------------
# result = 0
# def firstvalue(v):
#     global result
#     result = v
#
# def jia(n):
#     global result
#     result += n
#
# def jian(n):
#     global result
#     result -= n
#
# def cheng(n):
#     global result
#     result *= n
#
# def chu(n):
#     global result
#     result /= n
#
# # res = chu(1, 4)
# # print(res)
#
# # 计算 2 + 6 - 4 * 5
#
# # r1 = jia(2, 6)
# # r2 = jian(r1, 4)
# # r3 = cheng(r2, 5)
# # print(r3)
#
# firstvalue(2)
# jia(6)
# jian(4)
# cheng(5)
# print(result)

# --------------------------------------------------------代码3---------------------------------------------------------

# class Caculator:
#     __result = 0
#     @classmethod
#     def firstvalue(cls, v):
#         cls.__result = v
#     @classmethod
#     def jia(cls, n):
#         cls.__result += n
#     @classmethod
#     def jian(cls, n):
#         cls.__result -= n
#     @classmethod
#     def cheng(cls, n):
#         cls.__result *= n
#     @classmethod
#     def chu(cls, n):
#         cls.__result /= n
#     @classmethod
#     def show(cls):
#         print("计算的结果是:%d" % cls.__result)
# Caculator.firstvalue(2)
# Caculator.jia(6)
# Caculator.jian(4)
# Caculator.cheng(5)
# Caculator.show()

# --------------------------------------------------------代码4---------------------------------------------------------

# class Caculator:
#
#     def __init__(self, num):
#         self.__result = num
#
#     def jia(self, n):
#         self.__result += n
#
#     def jian(self, n):
#         self.__result -= n
#
#     def cheng(self, n):
#         self.__result *= n
#
#     def chu(self, n):
#         self.__result /= n
#
#     def 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 = num
#
#     def jia(self, n):
#         self.check_num(n)
#         self.__result += n
#
#     def jian(self, n):
#         self.check_num(n)
#         self.__result -= n
#
#     def cheng(self, n):
#         self.check_num(n)
#         self.__result *= n
#
#     def chu(self, n):
#         self.check_num(n)
#         self.__result /= n
#
#     def show(self):
#         print("计算的结果是:%d" % self.__result)
#
# c1 = Caculator(2)
# c1.jia(6)
# c1.jian(4)
# 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_zsq
#     def __init__(self, num):
#         self.__result = num
#
#     @check_num_zsq
#     def jia(self, n):
#         self.__result += n
#
#     @check_num_zsq
#     def jian(self, n):
#         self.__result -= n
#
#     @check_num_zsq
#     def cheng(self, n):
#         self.__result *= n
#
#     @check_num_zsq
#     def chu(self, n):
#         self.__result /= n
#
#     def 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_zsq
#     def __init__(self, num):
#         self.__result = num
#
#     @__check_num_zsq
#     def jia(self, n):
#         self.__result += n
#
#     @__check_num_zsq
#     def jian(self, n):
#         self.__result -= n
#
#     @__check_num_zsq
#     def cheng(self, n):
#         self.__result *= n
#
#     @__check_num_zsq
#     def chu(self, n):
#         self.__result /= n
#
#     def show(self):
#         print("计算的结果是:%d" % self.__result)
#
# c1 = Caculator(2)
# c1.jia(6)
# c1.jian(4)
# c1.cheng(5)
# c1.show()

# --------------------------------------------------------代码8---------------------------------------------------------
# 增加语音步骤操作提示
# # 1.导入win32com 仅适用于windows操作系统
# import win32com.client
#
# # 2.创建一个播报器对象
# speaker = win32com.client.Dispatch("SAPI.SpVoice")
# # 3.通过播报器对象,直接播放相对应的语音字符串。
# speaker.Speak("我的名字是fj")
# class Caculator:
#
#     def __say(self, world):
#         speaker = win32com.client.Dispatch("SAPI.SpVoice")
#         # 3.通过播报器对象,直接播放相对应的语音字符串。
#         speaker.Speak(world)
#
#     def __check_num_zsq(func):
#         def inner(self, n):
#             if not isinstance(n, int):
#                 raise TypeError("当前这个数据的类型有问题,应该是一个整型数据")
#             return func(self, n)
#         return inner
#     @__check_num_zsq
#     def __init__(self, num):
#         self.__say(num)
#         self.__result = num
#
#     @__check_num_zsq
#     def jia(self, n):
#         self.__say(n)
#         self.__result += n
#
#     @__check_num_zsq
#     def jian(self, n):
#         self.__say(n)
#         self.__result -= n
#
#     @__check_num_zsq
#     def cheng(self, n):
#         self.__say(n)
#         self.__result *= n
#
#     @__check_num_zsq
#     def chu(self, n):
#         self.__say(n)
#         self.__result /= n
#
#     def show(self):
#         self.__say("计算的结果是:%d" % self.__result)
#         print("计算的结果是:%d" % self.__result)
#
# c1 = Caculator(2)
# c1.jia(6)
# c1.jian(4)
# c1.cheng(5)
# c1.show()

# --------------------------------------------------------代码9---------------------------------------------------------
# # 用装饰器写播报功能
# #  将运算符号也播报出来
# # 1.导入win32com 仅适用于windows操作系统
# import win32com.client
#
# # 2.创建一个播报器对象
# speaker = win32com.client.Dispatch("SAPI.SpVoice")
# # 3.通过播报器对象,直接播放相对应的语音字符串。
# speaker.Speak("我的名字是fj")
# class Caculator:
#
#
#     def __check_num_zsq(func):
#         def inner(self, n):
#             if not isinstance(n, int):
#                 raise TypeError("当前这个数据的类型有问题,应该是一个整型数据")
#             return func(self, n)
#         return inner
#
#     def __say(self, world):
#         speaker = win32com.client.Dispatch("SAPI.SpVoice")
#         # 3.通过播报器对象,直接播放相对应的语音字符串。
#         speaker.Speak(world)
#
#     def __create_say_zsq(world=""):
#         def __say_zsq(func):
#             def inner(self, n):
#                 self.__say(world + str(n))
#                 return func(self, n)
#             return inner
#         return __say_zsq
#
#
#
#     @__check_num_zsq
#     @__create_say_zsq()
#     def __init__(self, num):
#         self.__say(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 *= n
#
#     @__check_num_zsq
#     @__create_say_zsq("除")
#     def chu(self, n):
#         self.__result /= n
#
#
#     def show(self):
#         self.__say("计算的结果是:%d" % self.__result)
#         print("计算的结果是:%d" % self.__result)
#
# # 用描述器在外界可以拿到结果值输出结果
#     @property
#     def result(self):
#         return self.__result
# c1 = Caculator(2)
# c1.jia(6)
# c1.jian(4)
# c1.cheng(5)
# c1.show()
# print(c1.result)

# --------------------------------------------------------代码10--------------------------------------------------------
# 减少c1,应用链式编程
# 用装饰器写播报功能
#  将运算符号也播报出来
# 1.导入win32com 仅适用于windows操作系统
import win32com.client

# 2.创建一个播报器对象
speaker = win32com.client.Dispatch("SAPI.SpVoice")
# 3.通过播报器对象,直接播放相对应的语音字符串。
speaker.Speak("我的名字是fj")
class Caculator:


    def __check_num_zsq(func):
        def inner(self, n):
            if not isinstance(n, int):
                raise TypeError("当前这个数据的类型有问题,应该是一个整型数据")
            return func(self, n)
        return inner

    def __say(self, world):
        speaker = win32com.client.Dispatch("SAPI.SpVoice")
        # 3.通过播报器对象,直接播放相对应的语音字符串。
        speaker.Speak(world)

    def __create_say_zsq(world=""):
        def __say_zsq(func):
            def inner(self, n):
                self.__say(world + str(n))
                return func(self, n)
            return inner
        return __say_zsq



    @__check_num_zsq
    @__create_say_zsq()
    def __init__(self, num):
        self.__say(num)
        self.__result = num
        return self
    @__check_num_zsq
    @__create_say_zsq("加")
    def jia(self, n):
        self.__result += n
        return self
    @__check_num_zsq
    @__create_say_zsq("减")
    def jian(self, n):
        self.__result -= n
        return self
    @__check_num_zsq
    @__create_say_zsq("乘")
    def cheng(self, n):
        self.__result *= n
        return self
    @__check_num_zsq
    @__create_say_zsq("除")
    def chu(self, n):
        self.__result /= n
        return self

    def show(self):
        self.__say("计算的结果是:%d" % self.__result)
        print("计算的结果是:%d" % self.__result)
        return self
# 用描述器在外界可以拿到结果值输出结果
    @property
    def result(self):
        return self.__result
c1 = Caculator(2)
c1.jia(6).jian(4).cheng(5).show()
print(c1.result)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值