📝 Практические задания

⚡ Задания в двух словах

  1. Система чеков: Receipt, Shift, SaleReceipt, ReturnReceipt.
  2. Система уведомлений: миксины и классы Courier, Admin.

Задача 1. Система управления кассовыми чеками

1.1 Создайте класс Receipt с ID и суммой. __str__ возвращает Receipt <ID>: <amount>.

1.2 Создайте класс Shift с уникальным ID, списком чеков и статусом. Реализуйте is_closed, close, get_total, list_receipts.

1.3 Метод add_receipt(amount) создаёт чек и добавляет в смену, если она открыта.

1.4 Метод add_return(source_shift, original_id, return_amount) создаёт возврат на основе чека из другой смены.

1.5 Добавьте SaleReceipt (сумма > 0) и ReturnReceipt (сумма < 0), унаследованные от Receipt.

1.6 Обновите Shift: add_receipt создаёт SaleReceipt, add_returnReturnReceipt. Добавьте фильтрацию по типу в list_receipts и get_total.

1.7 Проверьте всю систему: создайте смену с продажами, вторую смену с возвратом, выведите списки и суммы по типам.

Задача 2. Пользователи и уведомления

2.1 Создайте миксины:

  • EmailNotifyMixin — требует email, метод email_notify(message).
  • SmsNotifyMixin — требует phone, метод sms_notify(message).
  • PushNotifyMixin — метод push_notify(message), поля не требует.

2.2 Создайте базовый класс User с полем name.

2.3 Реализуйте Courier(User, EmailNotifyMixin, SmsNotifyMixin) и Admin(User, PushNotifyMixin). Каждый имеет метод notify(message).

2.4 Проверьте работу уведомлений.

Проверка понимания

Выберите один вариант ответа. После клика правильный ответ подсветится зелёным.

Вопрос 1

Что важнее всего в практическом задании?

Вопрос 2

Как безопаснее двигаться в практикуме?

Вопрос 3

Что делать, если решение не совпадает с ожидаемым результатом?

Вопрос 4

Какой стиль имён переменных обычно рекомендует PEP 8?

Вопрос 5

Зачем использовать f-strings в современном Python?

Вопрос 6

Когда полезен ранний возврат из функции?