🏠 Обзорный мини-проект
Summary session не содержит отдельного задания в LMS. Выполните обзорный мини-проект, чтобы закрепить абстрактные классы, пользовательские исключения и магические методы.
⚡ Кратко
Выполните обязательную часть домашнего задания, проверьте код на нескольких входных данных и только затем переходите к дополнительным задачам.
Задание 1. Фигуры и площади
Создайте абстрактный класс Shape.
- В классе должен быть метод
area(), который возвращает площадь фигуры. - Реализуйте два класса:
Circle— принимает радиус.Rectangle— принимает ширину и высоту.
Задание 2. Проверка размеров фигур
Доработайте фигуры из предыдущего задания:
- Добавьте проверку в конструкторы
CircleиRectangle, чтобы значения были положительными. - Если передано отрицательное или нулевое значение, выбрасывайте пользовательское исключение
InvalidSizeError.
Задание 3. Электронное письмо
Реализуйте класс Email, который представляет электронное письмо. Каждое письмо должно содержать:
sender— адрес отправителя;recipient— адрес получателя;subject— тема письма;body— текст письма;date— дата отправки.
Класс должен поддерживать:
- сравнение писем по дате;
- преобразование письма в строку;
- получение длины текста письма через
len(); - проверку на наличие текста:
bool(email)равноFalse, если текст пустой или состоит только из пробелов.
from datetime import datetime
e1 = Email("alice@example.com", "bob@example.com",
"Meeting", "Let's meet at 10am", datetime(2024, 6, 10))
e2 = Email("bob@example.com", "alice@example.com",
"Report", "", datetime(2024, 6, 11))
print(e1)
print("Length:", len(e1))
print("Has text:", bool(e1))
print("Is newer:", e2 > e1)
Задание 4. Класс для работы с деньгами
Создайте класс Money, в котором:
- можно складывать и вычитать объекты через операторы
+и-; - объект выводится как строка в виде
$<amount>; - при сложении и вычитании возвращается новый объект;
- если вычитание приводит к отрицательному значению — вернуть объект с суммой
0.
money1 = Money(100)
money2 = Money(50)
print(money1 + money2)
print(money1 - money2)
print(money2 - money1)
Ожидаемый вывод:
$150
$50
$0