Повторение — Простой калькулятор
Часть раздела Object Oriented Programming путешествия по Python на Coddy — урок 8 из 64.
Задание
СреднеВаш класс Calculator в файле calculator.py должен:
- Иметь конструктор, который инициализирует атрибут
resultзначением 0 - Включать методы
add,subtract,multiplyиdivide, каждый из которых:- Принимает число в качестве аргумента
- Выполняет операцию между текущим значением
resultи этим числом - Обновляет атрибут
result - Возвращает новый результат
- Включать метод
clear, который сбрасываетresultдо 0 - Включать метод
get_result, который возвращает текущий результат - Для метода
divideвы должны обработать деление на ноль следующим образом:- Проверить, равно ли переданное число 0
- Если оно равно нулю, вывести ровно: "Error: Division by zero"
- Оставить атрибут
resultбез изменений в этом случае - Вернуть неизмененное значение
result
Файл driver.py импортирует ваш класс Calculator и протестирует его с помощью кода, похожего на этот:
from calculator import Calculator
calc = Calculator()
calc.add(5) # result becomes 5
calc.multiply(3) # result becomes 15
calc.subtract(2) # result becomes 13
calc.divide(0) # prints "Error: Division by zero", result remains 13
calc.divide(2) # result becomes 6.5
calc.clear() # result becomes 0Следуйте комментариям TODO в файле calculator.py, чтобы реализовать всю необходимую функциональность.
Шпаргалка
Создайте класс Calculator с базовыми арифметическими операциями:
class Calculator:
def __init__(self):
self.result = 0
def add(self, number):
self.result += number
return self.result
def subtract(self, number):
self.result -= number
return self.result
def multiply(self, number):
self.result *= number
return self.result
def divide(self, number):
if number == 0:
print("Error: Division by zero")
return self.result
self.result /= number
return self.result
def clear(self):
self.result = 0
def get_result(self):
return self.resultПример использования:
calc = Calculator()
calc.add(5) # результат становится 5
calc.multiply(3) # результат становится 15
calc.divide(0) # выводит ошибку, результат не меняетсяПопробуйте сами
from calculator import Calculator
# Обработчик тестовых случаев
test_case = input()
if test_case == "constructor_test":
# Тест создания калькулятора и начального состояния
calc = Calculator()
print(f"Initial result: {calc.get_result()}")
print("Calculator created successfully")
elif test_case == "addition_test":
# Тест функциональности сложения
calc = Calculator()
result1 = calc.add(10)
print(f"After adding 10: {result1}")
result2 = calc.add(5)
print(f"After adding 5: {result2}")
print(f"Final result: {calc.get_result()}")
elif test_case == "subtraction_test":
# Тест функциональности вычитания
calc = Calculator()
calc.add(20) # Начинаем с 20
result1 = calc.subtract(8)
print(f"After subtracting 8 from 20: {result1}")
result2 = calc.subtract(2)
print(f"After subtracting 2: {result2}")
print(f"Final result: {calc.get_result()}")
elif test_case == "multiplication_test":
# Тест функциональности умножения
calc = Calculator()
calc.add(5) # Начинаем с 5
result1 = calc.multiply(4)
print(f"After multiplying by 4: {result1}")
result2 = calc.multiply(2)
print(f"After multiplying by 2: {result2}")
print(f"Final result: {calc.get_result()}")
elif test_case == "division_test":
# Тест функциональности деления
calc = Calculator()
calc.add(100) # Начинаем с 100
result1 = calc.divide(4)
print(f"After dividing by 4: {result1}")
result2 = calc.divide(5)
print(f"After dividing by 5: {result2}")
print(f"Final result: {calc.get_result()}")
elif test_case == "division_by_zero_test":
# Тест обработки ошибки деления на ноль
calc = Calculator()
calc.add(50)
print(f"Initial value: {calc.get_result()}")
result = calc.divide(0) # Должно вывести сообщение об ошибке
print(f"Result after division by zero: {result}")
print(f"Value unchanged: {calc.get_result()}")
elif test_case == "clear_test":
# Тест функциональности очистки
calc = Calculator()
calc.add(25)
calc.multiply(3)
print(f"Before clear: {calc.get_result()}")
result = calc.clear()
print(f"After clear: {result}")
print(f"Current result: {calc.get_result()}")
elif test_case == "comprehensive_test":
# Тест всех операций последовательно
calc = Calculator()
# Выполнение серии операций
calc.add(10) # result = 10
calc.multiply(3) # result = 30
calc.subtract(5) # result = 25
calc.divide(5) # result = 5
print(f"After sequence of operations: {calc.get_result()}")
# Тест обработки ошибок
calc.divide(0) # Должно вывести ошибку
print(f"After division by zero attempt: {calc.get_result()}")
# Очистить и начать заново
calc.clear()
calc.add(100)
print(f"After clear and add 100: {calc.get_result()}")
else:
print("Unknown test case")
Все уроки раздела Object Oriented Programming
1Основы ООП
Внешние файлыВведение в ООПКлассы и объектыПараметр selfМетодыАтрибутыМетод-конструктор (__init__)Повторение — Простой калькулятор4Наследование
Базовое наследованиеФункция super()Переопределение методовМножественное наследованиеПорядок разрешения методовИтоги — Иерархия сотрудников7Специальные методы
Введение в магические методыПерегрузка операторовМагические методы контейнеровПовторение — Пользовательский список10Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн SingletonПаттерн FactoryПаттерн ObserverПаттерн Strategy5Полиморфизм
Снова о переопределении методовУтиная типизацияАбстрактные классы и методыПроектирование интерфейсовИтоги — Калькулятор фигур8Продвинутые концепции ООП
Композиция против наследованияМиксиныСтатические методы и методы классаДекораторы классовМенеджеры контекста11Паттерны проектирования. Часть 2
Паттерн КомандаПаттерн АдаптерПаттерн ДекораторПаттерн Шаблонный методПаттерн СостояниеПаттерн Компоновщик3Свойства классов
Переменные экземпляра и классаДекораторы свойствПриватные атрибутыИтоги — Менеджер банковского счета6Инкапсуляция
Public, Protected, Private члены классаМодификаторы доступаСокрытие данныхДекораторы property: продвинутый уровеньИтоги: Система учета студентов12Проект: Управление библиотекой
Обзор проектаКлассы Book и User