For students of Netology/Открытие и чтение файла, запись в файл.md
Само задание тут
Это поможет вам самостоятельно написать код, следуя логике задачи.
Пошаговое описание решения:
-
Открыть файл с рецептами:
- Используй метод для открытия файла в режиме чтения (
open
). - Считай содержимое файла построчно в список строк (
readlines
).
- Используй метод для открытия файла в режиме чтения (
-
Создать пустой словарь для хранения рецептов:
- Назови его
cook_book
.
- Назови его
-
Начать обработку строк из файла:
- Проходи по строкам файла с помощью цикла (например,
while
илиfor
). - Для каждой строки:
- Если это название блюда:
- Сохрани название блюда.
- Перейди к следующей строке.
- Если это название блюда:
- Проходи по строкам файла с помощью цикла (например,
-
Определить количество ингредиентов для блюда:
- Прочитай число из строки (конвертируй в
int
). - Перейди к следующей строке.
- Прочитай число из строки (конвертируй в
-
Собрать список ингредиентов:
- Создай пустой список для ингредиентов текущего блюда.
- Пройди по строкам столько раз, сколько указано в числе ингредиентов.
- Для каждой строки:
- Раздели строку по разделителю
|
(используй методsplit
). - Извлеки части строки: название ингредиента, количество, единицу измерения.
- Создай словарь с ключами
ingredient_name
,quantity
,measure
. - Добавь этот словарь в список ингредиентов.
- Раздели строку по разделителю
- Для каждой строки:
-
Добавить блюдо в словарь:
- В
cook_book
добавь новую запись. - Ключом будет название блюда.
- Значением будет список ингредиентов.
- В
-
Пропустить пустую строку:
- Если текущая строка пустая (например, между блюдами), просто пропусти её.
-
Вывести результат:
- После завершения обработки всех строк файла, выведи содержимое словаря
cook_book
для проверки.
- После завершения обработки всех строк файла, выведи содержимое словаря
Псевдокод:
1. Открыть файл с рецептами
2. Создать пустой словарь cook_book
3. Пройтись по строкам файла:
3.1 Если строка - это название блюда:
- Сохранить название блюда
- Перейти к следующей строке
3.2 Если строка - это число (количество ингредиентов):
- Считать количество ингредиентов
- Создать пустой список для ингредиентов
- Перейти к следующей строке
3.3 Для каждой строки с ингредиентом:
- Разделить строку по разделителю " | "
- Сохранить данные как:
'ingredient_name': название,
'quantity': количество,
'measure': единица измерения
- Добавить словарь ингредиента в список ингредиентов
3.4 Когда ингредиенты для блюда обработаны:
- Добавить блюдо в cook_book (ключ - название, значение - список ингредиентов)
3.5 Если строка пустая:
- Пропустить её
4. После завершения обработки файла:
- Вывести словарь cook_book
Подсказки:
-
Как проверять тип строки (блюдо, число, ингредиент)?
- Если строка не пустая и не содержит разделителя
|
, это либо название блюда, либо количество ингредиентов. - Если строка содержит разделитель
|
, это ингредиент.
- Если строка не пустая и не содержит разделителя
-
Как обрабатывать пустые строки?
- Проверяй строку через метод
strip
. Если строка после очистки пустая, просто пропускай её.
- Проверяй строку через метод
-
Как работать с числом ингредиентов?
- Используй
int()
для преобразования строки в число.
- Используй
Пример результата:
После написания кода у тебя должен получиться вывод вида:
{
'Омлет': [
{'ingredient_name': 'Яйцо', 'quantity': 2, 'measure': 'шт'},
{'ingredient_name': 'Молоко', 'quantity': 100, 'measure': 'мл'},
{'ingredient_name': 'Помидор', 'quantity': 2, 'measure': 'шт'}
],
'Утка по-пекински': [
{'ingredient_name': 'Утка', 'quantity': 1, 'measure': 'шт'},
{'ingredient_name': 'Вода', 'quantity': 2, 'measure': 'л'},
{'ingredient_name': 'Мед', 'quantity': 3, 'measure': 'ст.л'},
{'ingredient_name': 'Соевый соус', 'quantity': 60, 'measure': 'мл'}
],
...
}
Это должно помочь вам написать код самостоятельно.
Если совсем не получается, можно подсмотреть пример решения, но настоятельно рекомендуется решать самостояетльно.