Практическое задание №3: Память и подтверждение действий: README.md
This commit is contained in:
+100
-83
@@ -1,112 +1,129 @@
|
|||||||
# Практическое задание №3: Память и подтверждение действий
|
# Практическое задание №3
|
||||||
|
**Память и подтверждение действий**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Описание
|
## Описание
|
||||||
В этом проекте реализована простая консольная игра «Память».
|
|
||||||
Игра состоит из двух режимов:
|
|
||||||
|
|
||||||
1. **Классический** – игроку показывается последовательность случайных символов, после чего он должен её воспроизвести.
|
В этом проекте реализована простая консольная утилита, которая демонстрирует работу с памятью (сохранение данных в файл) и подтверждением пользовательских действий.
|
||||||
2. **С подтверждением действий** – каждый ввод пользователя проверяется и при ошибке выводится сообщение об ошибке.
|
|
||||||
|
|
||||||
Для улучшения визуального восприятия использована библиотека `rich`, которая позволяет красиво форматировать текст в терминале (цвета, таблицы, индикаторы прогресса).
|
Основные возможности:
|
||||||
|
|
||||||
|
- **Сохранение** введённых пользователем строк в JSON‑файл.
|
||||||
|
- **Загрузка** ранее сохранённого списка строк при запуске программы.
|
||||||
|
- **Подтверждение** удаления элемента из памяти через диалог «Да/Нет».
|
||||||
|
- Красивый вывод сообщений и таблиц с помощью библиотеки `rich`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Структура проекта
|
## Структура проекта
|
||||||
|
|
||||||
```
|
```
|
||||||
memory_game/
|
memory_confirm/
|
||||||
├── main.py # точка входа – запускает игру
|
├── data.json # Хранилище (создаётся при первом запуске)
|
||||||
├── game.py # логика игры и вспомогательные функции
|
├── main.py # Точка входа
|
||||||
└── requirements.txt
|
└── utils.py # Вспомогательные функции
|
||||||
```
|
```
|
||||||
|
|
||||||
|
- **`main.py`** – основной скрипт, который запускает CLI‑интерфейс.
|
||||||
|
- **`utils.py`** – содержит функции для чтения/записи JSON и подтверждения действий.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Установка зависимостей
|
## Установка зависимостей
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Клонируйте репозиторий (если ещё не сделали это)
|
|
||||||
git clone https://github.com/your-username/memory_game.git
|
|
||||||
cd memory_game
|
|
||||||
|
|
||||||
# Создайте виртуальное окружение (рекомендуется)
|
# Создайте виртуальное окружение (рекомендуется)
|
||||||
python -m venv .venv
|
python -m venv .venv
|
||||||
source .venv/bin/activate # Windows: .\.venv\Scripts\activate
|
source .venv/bin/activate # Windows: .venv\Scripts\activate
|
||||||
|
|
||||||
# Установите зависимости из файла requirements.txt
|
# Установите зависимости из requirements.txt
|
||||||
pip install -r requirements.txt
|
pip install -r requirements.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
`requirements.txt` содержит только одну строку:
|
`requirements.txt` содержит:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
rich>=13.0.0
|
rich>=13.0.0
|
||||||
```
|
```
|
||||||
|
|
||||||
## Запуск программы
|
Если файла `requirements.txt` нет, установите вручную:
|
||||||
|
|
||||||
### 1. Классический режим
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python main.py classic
|
pip install rich
|
||||||
```
|
|
||||||
|
|
||||||
Игра начнётся с простого режима «памяти». В терминале будет показана последовательность символов, затем вы будете приглашены ввести её.
|
|
||||||
|
|
||||||
### 2. Режим подтверждения действий
|
|
||||||
|
|
||||||
```bash
|
|
||||||
python main.py confirm
|
|
||||||
```
|
|
||||||
|
|
||||||
В этом режиме после каждого ввода проверяется правильность и при ошибке выводится красное сообщение об ошибке.
|
|
||||||
|
|
||||||
### 3. Помощь
|
|
||||||
|
|
||||||
```bash
|
|
||||||
python main.py --help
|
|
||||||
```
|
|
||||||
|
|
||||||
Выводит краткое описание доступных команд.
|
|
||||||
|
|
||||||
## Пример использования
|
|
||||||
|
|
||||||
```text
|
|
||||||
$ python main.py classic
|
|
||||||
Добро пожаловать в игру «Память»!
|
|
||||||
Введите 'y' для начала, 'q' чтобы выйти: y
|
|
||||||
|
|
||||||
Секвенция:
|
|
||||||
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
|
|
||||||
|
|
||||||
Ваша задача — воспроизвести эту последовательность.
|
|
||||||
Введите строку (разделяйте символы пробелом):
|
|
||||||
```
|
|
||||||
|
|
||||||
Если пользователь вводит правильную последовательность, выводится:
|
|
||||||
|
|
||||||
```text
|
|
||||||
✅ Поздравляем! Вы успешно запомнили всю последовательность!
|
|
||||||
```
|
|
||||||
|
|
||||||
При ошибке в режиме подтверждения:
|
|
||||||
|
|
||||||
```text
|
|
||||||
❌ Ошибка: ожидается 'C', но получено 'D'.
|
|
||||||
Попробуйте ещё раз.
|
|
||||||
```
|
|
||||||
|
|
||||||
## Как добавить новые режимы
|
|
||||||
|
|
||||||
1. Создайте новый файл `game_modes/<mode_name>.py`.
|
|
||||||
2. Реализуйте класс `GameMode` с методами:
|
|
||||||
- `start(self)`: запускает игру
|
|
||||||
- `process_input(self, user_input: str) -> bool`: обрабатывает ввод и возвращает `True`, если игра продолжается.
|
|
||||||
3. Зарегистрируйте новый режим в `main.py`.
|
|
||||||
|
|
||||||
## Тесты
|
|
||||||
|
|
||||||
Для проверки корректности работы можно использовать модульные тесты (если добавлены). Запуск:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
pytest tests/
|
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Если возникли вопросы, обращайтесь к авторам проекта или открывайте issue на GitHub.
|
## Запуск программы
|
||||||
|
|
||||||
|
### 1. Через команду
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python main.py
|
||||||
|
```
|
||||||
|
|
||||||
|
После запуска вы увидите меню:
|
||||||
|
|
||||||
|
```
|
||||||
|
=== Меню ===
|
||||||
|
1. Добавить строку
|
||||||
|
2. Показать все строки
|
||||||
|
3. Удалить строку
|
||||||
|
4. Выход
|
||||||
|
Выберите действие:
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Пример использования
|
||||||
|
|
||||||
|
```text
|
||||||
|
> python main.py
|
||||||
|
=== Меню ===
|
||||||
|
1. Добавить строку
|
||||||
|
2. Показать все строки
|
||||||
|
3. Удалить строку
|
||||||
|
4. Выход
|
||||||
|
Выберите действие: 1
|
||||||
|
Введите строку для сохранения: Hello, world!
|
||||||
|
✅ Строка успешно добавлена.
|
||||||
|
|
||||||
|
=== Меню ===
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Удаление
|
||||||
|
|
||||||
|
```text
|
||||||
|
> python main.py
|
||||||
|
... (выбираем пункт 3)
|
||||||
|
Введите номер строки для удаления: 2
|
||||||
|
Вы уверены, что хотите удалить строку "Пример"? [y/N]: y
|
||||||
|
✅ Строка удалена.
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Как это работает
|
||||||
|
|
||||||
|
- **`utils.load_data()`** читает `data.json`. Если файл отсутствует – создаётся пустой список.
|
||||||
|
- **`utils.save_data(data)`** сохраняет список в JSON‑файл с отступом 4 пробела.
|
||||||
|
- **`utils.confirm(prompt)`** выводит запрос через `rich.prompt.Prompt.ask`, ожидая ответа `y/n`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Тесты
|
||||||
|
|
||||||
|
Для проверки корректности работы можно запустить:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python -m unittest discover tests
|
||||||
|
```
|
||||||
|
|
||||||
|
(Если тестовые файлы находятся в каталоге `tests/`.)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Лицензия
|
||||||
|
|
||||||
|
MIT © 2026.
|
||||||
|
---
|
||||||
Reference in New Issue
Block a user