Основные калькулятор, который вычисляет результат на основе операндов, используя класс


Вопрос:

Создать простой калькулятор, используя классы, которые дали 3 входов - число 1, число 2 и оператор вычисляет результат.

class calculator():

    def __init__(self,value1 , value2, operand):
        self.value1 = int(value1)
        self.value2 = int(value2)
        self.operand = operand

    def calculate (self):
        if self.operand == '+' :
            return self.value1 + self.value2

        if self.operand == '*':
            return self.value1 * self.value2

        if self.operand == '-' :
            return self.value1 - self.value2

        if self.operand == '/' :
            if self.value2 == 0:
                raise ZeroDivisionError
            else:
                return self.value1 / self.value2


r = calculator(6,7, '+')
print r.calculate()

r = calculator(3,7, '-')
print r.calculate()

r = calculator(6,0, '*')
print r.calculate()

r = calculator(9,5, '/')
print r.calculate()

Как я могу сделать эту функцию лучше? Это правильная реализация класса?



Комментарии
2 ответа

Как правило, если класс имеет два метода, один из которых является конструктор, то это не должно быть написано как класс. Простой calculate(value1, value2, operand) функция будет лучше.

Если вы пишете класс, затем ОПТОСОЗ 8 Конвенции, он должен быть назван Calculator вместо.

Я не рекомендую int() скинется. print calculator(1.5, 3, '+').calculate() в результате 4потому что int() выполняет усечение. Хороший дизайн будет либо производить 4.5 как ожидалось, или поднять исключение на проверку неисправности.

2
ответ дан 22 февраля 2018 в 11:02 Источник Поделиться


  • Нет необходимости вручную raise ZeroDivisionError. Python будет делать это в любом случае для вас.

  • А не проверять операнд с кучей ifС создания словаря operand, lambda:

    ops = {
    '+': lambda x,y: x + y,
    ....
    }

    и вычислить результат

    ops[operand](value1, value2)

    Такой словарь (инициализируется в конструкторе) является единственным обоснованием для принятия класса. Он не чувствует себя право вносить оператор и значения членов класса. Рассмотрим

    r = calculator()
    r.calculate(1, 2, '+')
    r.calculate(3, 4, '*')

    и т. д.


2
ответ дан 22 февраля 2018 в 06:02 Источник Поделиться