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
    

      

  • 相关阅读:
    关于数据库的alter table操作和索引概念
    mysql_fetch_array()和 mysql_fetch_array()的区别
    left 截取
    学会设置五大类MySQL参数
    MySQL性能优化的最佳20+条经验
    varchar to int error
    2003服务器重启
    缺少注释的结尾标记 '*/'。 '*' 附近有语法错误。
    2003的服务器终端服务器超出最大连接数的解决办法转载
    电脑报警音解读转载
  • 原文地址:https://www.cnblogs.com/bjdxy/p/2835400.html
Copyright © 2011-2022 走看看