TransWikia.com

Что не так с кодом по calc?

Stack Overflow на русском Asked on November 13, 2021

Опишите класс Calculator, который будет реализовывать следующие методы и поля:

  • sum(self, a, b) – сложение чисел a и b

  • sub(self, a, b) – вычитание

  • mul(self, a, b) – умножение

  • div(self, a, b, mod=False) – деление.
    Если параметр mod == True, то метод должен возвращать остаток от деления вместо деления. По умолчанию mod=False.

  • history(self, n) – этот метод должен возвращать строку с операцией по ее номеру относительно текущего момента (1 – последняя, 2 – предпоследняя). Формат вывода: sum(5, 15) == 20 (ОБРАТИТЕ ВНИМАНИЕ: В ВИДЕО ЗАДАНИЕ БЫЛО ОЗВУЧЕНО ПО-ДРУГОМУ! Для прохождения тестов МЕТОД ДОЛЖЕН ВОЗВРАЩАТЬ ЗНАЧЕНИЕ, А НЕ ВЫВОДИТЬ ЕГО НА ЭКРАН)

  • last – строка того же формата, что в предыдущем пункте, в которой содержится информация о последней операции по всем созданным объектам калькулятора. Т.е. это последняя операция последнего использованного объекта калькулятор. Если операций пока не было, то None.

  • clear(cls) – метод, который очищает last, т.е. присваивает ему значение None.

Формат вывода

При сохранении строк в history и last нужно выводить только один знак после запятой дробного числа. При выполнении деления с mod сам параметр mod не нужно записывать в лог.

Примечания

В конец файла добавьте строки:

from classes1_tests import Test

Test(Calculator).run_all()

Таким образом, в коде программы должно быть только описание класса и эти две строки.

Программа:

class Calculator:
    last = None
    def __init__(self):
        self.history_array = []
   
    def sum(self, a, b):
        self.history_array.append( a + b)
        self.last = self.history_array[-1]
        return a + b
    def sub(self, a, b):
        self.history_array.append( a - b)
        self.last = self.history_array[-1]
        return a - b
    def mul(self, a, b):

        self.history_array.append(a * b)
        self.last = self.history_array[-1]
        return a * b
    def div(self, a, b, mod=False):
        if mod:
            self.history_array.append( a % b)
            self.last = self.history_array[-1]
            return a % b
        else:
            self.history_array.append(a / b)
            self.last = self.history_array[-1]
            return a / b
    def history(self, n):
        try:
            result = self.history_array[-n]
        except IndexError:
            result = None
        return result

    def clear(self): 
        self.last = None


from classes1_tests import Test

Test(Calculator).run_all()

One Answer

Вы присваиваете не классовой переменной last, а переменной объекта: вам нужно вместо self.last писать Calculator.last. Вот так должно сработать:

class Calculator:
    last = None
    def __init__(self):
        self.history_array = []
   
    def sum(self, a, b):
        self.history_array.append( a + b)
        Calculator.last = self.history_array[-1]
        return a + b

    def sub(self, a, b):
        self.history_array.append( a - b)
        Calculator.last = self.history_array[-1]
        return a - b

    def mul(self, a, b):
        self.history_array.append(a * b)
        Calculator.last = self.history_array[-1]
        return a * b

    def div(self, a, b, mod=False):
        if mod:
            self.history_array.append( a % b)
            Calculator.last = self.history_array[-1]
            return a % b
        else:
            self.history_array.append(a / b)
            Calculator.last = self.history_array[-1]
            return a / b

    def history(self, n):
        try:
            result = self.history_array[-n]
        except IndexError:
            result = None
        return result

    def clear(self): 
        Calculator.last = None


from classes1_tests import Test

Test(Calculator).run_all()

Answered by n1tr0xs on November 13, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP