For students of Netology


Само задание тут

Это поможет вам самостоятельно написать код, следуя логике задачи.


Пошаговое описание решения:

  1. Открыть файл с рецептами:

    • Используй метод для открытия файла в режиме чтения (open).
    • Считай содержимое файла построчно в список строк (readlines).
  2. Создать пустой словарь для хранения рецептов:

    • Назови его cook_book.
  3. Начать обработку строк из файла:

    • Проходи по строкам файла с помощью цикла (например, while или for).
    • Для каждой строки:
      • Если это название блюда:
        • Сохрани название блюда.
        • Перейди к следующей строке.
  4. Определить количество ингредиентов для блюда:

    • Прочитай число из строки (конвертируй в int).
    • Перейди к следующей строке.
  5. Собрать список ингредиентов:

    • Создай пустой список для ингредиентов текущего блюда.
    • Пройди по строкам столько раз, сколько указано в числе ингредиентов.
      • Для каждой строки:
        • Раздели строку по разделителю | (используй метод split).
        • Извлеки части строки: название ингредиента, количество, единицу измерения.
        • Создай словарь с ключами ingredient_name, quantity, measure.
        • Добавь этот словарь в список ингредиентов.
  6. Добавить блюдо в словарь:

    • В cook_book добавь новую запись.
    • Ключом будет название блюда.
    • Значением будет список ингредиентов.
  7. Пропустить пустую строку:

    • Если текущая строка пустая (например, между блюдами), просто пропусти её.
  8. Вывести результат:

    • После завершения обработки всех строк файла, выведи содержимое словаря 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': 'мл'}
  ],
  ...
}

Это должно помочь вам написать код самостоятельно.

Если совсем не получается, можно подсмотреть пример решения, но настоятельно рекомендуется решать самостояетльно.

пример решения