Added tasks for the control work
This commit is contained in:
@@ -0,0 +1,120 @@
|
||||
### Задача 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. Заставьте покупателя оплатить товары в корзине.
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user