🏠 Домашнее задание

⚡ Кратко

Практическая работа урока 73 — система чеков и система уведомлений. Решение см. в ✅ Решениях.

Условие

Полное условие совпадает с 📝 Заданиями. Ниже — пошаговый план решения системы чеков.

Подготовка окружения

  1. Создайте файл practice18.py в VS Code.
  2. Убедитесь, что Python 3.10+ установлен.

Пошаговое решение системы чеков

Шаг 1. Базовый класс Receipt:

class Receipt:
    def __init__(self, receipt_id: int, amount: float) -> None:
        self.id = receipt_id
        self.amount = amount

    def __str__(self) -> str:
        return f"{self.__class__.__name__} {self.id}: {self.amount}"

Шаг 2. Наследники SaleReceipt и ReturnReceipt:

class SaleReceipt(Receipt):
    def __init__(self, receipt_id: int, amount: float) -> None:
        if amount <= 0:
            raise ValueError("SaleReceipt amount must be positive.")
        super().__init__(receipt_id, amount)

    def __str__(self) -> str:
        return f"SaleReceipt {self.id}: +{self.amount}"


class ReturnReceipt(Receipt):
    def __init__(self, receipt_id: int, amount: float) -> None:
        if amount >= 0:
            raise ValueError("ReturnReceipt amount must be negative.")
        super().__init__(receipt_id, amount)

Шаг 3. Класс Shift с методами добавления, возврата и подсчёта.

Проверка в VS Code

python practice18.py

Убедитесь, что:

  • Продажи создаются как SaleReceipt с плюсом.
  • Возвраты — как ReturnReceipt с минусом.
  • Закрытая смена не принимает новые чеки.
  • Сумма возврата не превышает исходный чек.