zoukankan      html  css  js  c++  java
  • 一个面向对象的简单计算器(python)

    #coding=utf8
    import string
    
    def count(numA, numB, operator):
        try:
            numberA = string.atof(numA)
            numberB = string.atof(numB)
        except:
            exit("input error,please check it number A :'%s' --  number B:'%s'" % (numA, numB))
        op = OperationFactory.createOperate(operator)
    
        op.setA(numberA)
        op.setB(numberB)
        return op.getResult()
    
    class OperationFactory(object):
        '''
        工厂方法,生成对应操作类
        '''
        @staticmethod
        def createOperate(operate):
            operators = {
                '+':OperationAdd(),
                '-':OperationSub(),
                '*':OperationMul(),
                '/':OperationDiv(),
            }
            try:
                return operators[operate]
            except KeyError:
                exit("Temporarily does not support '%s' operator" % operate)
    
    class Operation(object):
        '''
        操作父类,在需要时可以增加相应子类,如取模类OperationMod,复数类等,增加子类不影响其他子类的运算,
        达到封装的目的
        '''
        _numberA = 0
        _numberB = 0
    
        def NumberA(self):
            return self._numberA
    
        def NumberB(self):
            return self._numberB
    
        def getResult(self):
            return 0
    
        def setA(self, A):
            self._numberA = A
    
        def setB(self, B):
            self._numberB = B
    
    class OperationAdd(Operation):
        def getResult(self):
            result = self.NumberA() + self.NumberB()
            return result
    
    class OperationSub(Operation):
        def getResult(self):
            result = self.NumberA() - self.NumberB()
            return result
    
    class OperationMul(Operation):
        def getResult(self):
            result = self.NumberA() * self.NumberB()
            return result
    
    class OperationDiv(Operation):
        def getResult(self):
            result = self.NumberA() / self.NumberB()
            return result
    
    if __name__ == '__main__':
        left = raw_input('number A: ')
        sign = raw_input('请输入 + - * / :')
        right = raw_input('number B: ')
        rs = count(left, right, sign)
        print rs
    

      

  • 相关阅读:
    sql 查出一张表中重复的所有记录数据
    几种常见SQL分页方式效率比较
    Redis命令参考之复制(Replication)
    Redis-benchmark使用总结
    redis压力测试详解
    c#:ThreadPool实现并行分析,并实现线程同步结束
    C#多线程学习 之 线程池[ThreadPool]
    [C#基础]ref和out的区别
    C#:ref和out的联系及区别。
    生产环境中使用Docker Swarm的一些建议
  • 原文地址:https://www.cnblogs.com/bjdxy/p/2835400.html
Copyright © 2011-2022 走看看