Files
Igor-kr/OOP/task/4/TASK.md
T
2026-07-14 12:20:34 +03:00

7.0 KiB
Raw Blame History

Задача 4. Поэма Края (ООП и работа с JSON)

Контекст лора: Игрок проделал долгий путь, чтобы достичь конца игры. Теперь он видит слова на экране и слышит голоса из пустоты. Вселенная обращается к нему напрямую. В финале Поэма Края должна связать мысли игрока и послание вселенной воедино, прочитав сакральный текст из внешнего источника.

Постановка

  • Читатель поэмы: Имеет имя файла и может читать текст поэмы из JSON-файла.
  • Игрок: Имеет имя и может видеть слова на экране.
  • Вселенная: Имеет имя и может произносить финальное послание.
  • Поэма Края: Содержит читателя, игрока и вселенную; может воспроизводить титры, используя текст из JSON.

Задание

Класс PoemReader:

  1. Импортируйте модуль json.
  2. Создайте класс PoemReader.
  3. Создайте метод __init__(self, filename).
  4. Создайте метод read_poem(self), который открывает JSON-файл на чтение (с кодировкой utf-8), преобразует его содержимое в словарь и возвращает значение по ключу "poem_text".

Класс Player:

  1. Создайте класс Player.
  2. Создайте метод __init__(self, name).
  3. Создайте метод see_words(self), который выводит сообщение: "[Имя] читает наши мысли так, словно это слова на экране."

Класс Universe:

  1. Создайте класс Universe.
  2. Создайте метод __init__(self), определяющий свойство name равным "Вселенная".
  3. Создайте метод speak(self), выводящий фразу: "И Вселенная говорит тебе: Я люблю тебя."

Класс EndPoem:

  1. Создайте класс EndPoem.
  2. Создайте метод __init__(self, reader, player, universe).
  3. Создайте метод play_credits(self), который: вызывает чтение текста из JSON, выводит его на экран, а затем вызывает методы игрока и вселенной.

Тесты:

  1. Создайте файл poem.json рядом с вашим скриптом, поместив туда словарь с ключом "poem_text" и текстом поэмы.
  2. Создайте объект читателя, передав ему имя файла.
  3. Создайте объекты игрока и вселенной.
  4. Создайте объект поэмы и запустите титры.

Задача 5. Библиотека (ООП - Инкапсуляция и Взаимодействие)

Постановка

  • Книга: Имеет название, автора и статус ("В библиотеке", "Выдана"). Может менять свой статус на противоположный.
  • Читатель: Имеет имя и список взятых книг. Может брать и возвращать книги.
  • Библиотека: Содержит список всех доступных книг. Может выдавать книгу читателю.

Задание

Класс Book:

  1. Создайте класс Book.
  2. В __init__(self, title, author) определите свойства title, author и status (по умолчанию "В библиотеке").
  3. Создайте метод change_status(self), меняющий статус книги на "Выдана", если она в библиотеке, и обратно.

Класс Reader:

  1. Создайте класс Reader.
  2. В __init__(self, name) сохраните имя и создайте пустой список borrowed_books.
  3. Создайте метод take_book(self, book), добавляющий переданную книгу в список.
  4. Создайте метод return_book(self, book), удаляющий книгу из списка.

Класс Library:

  1. Создайте класс Library.
  2. В __init__(self) создайте список books и добавьте туда несколько книг по умолчанию.
  3. Создайте метод lend_book(self, book, reader), который проверяет статус книги, меняет его через метод книги на "Выдана" и передает читателю в его список.

Тесты:

  1. Создайте библиотеку.
  2. Создайте читателя.
  3. Используя библиотеку, выдайте читателю книгу.

Задача 6. Магазин (ООП - Агрегация)

Постановка

  • Товар: Имеет название и цену.
  • Корзина: Содержит список товаров. Может добавлять товар и считать общую стоимость.
  • Покупатель: Имеет имя, баланс и корзину. Может оплачивать корзину.

Задание

Класс Product:

  1. Создайте класс Product.
  2. Создайте метод __init__(self, name, price).

Класс Cart:

  1. Создайте класс Cart.
  2. В __init__(self) создайте пустой список products.
  3. Создайте метод add_product(self, product), добавляющий товар в список.
  4. Создайте метод get_total(self), возвращающий сумму цен всех товаров.

Класс Customer:

  1. Создайте класс Customer.
  2. В __init__(self, name, balance, cart) сохраните переданные параметры.
  3. Создайте метод pay(self), который проверяет, хватает ли баланса для оплаты корзины. Если хватает — вычитает сумму из баланса и очищает корзину. Если нет — выводит предупреждение.

Тесты:

  1. Создайте несколько товаров.
  2. Создайте корзину и добавьте в нее товары.
  3. Создайте покупателя, передав ему корзину и баланс.
  4. Заставьте покупателя оплатить товары в корзине.