Что не так с кодом по calc?
Опишите класс Calculator, который будет реализовывать следующие методы и поля:
sum(self, a, b)- сложение чисел a и bsub(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()
Ответы (1 шт):
Вы присваиваете не классовой переменной 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()