/
sltrs1
/
python_files_1
Обзор
Документация
Войти
/
sltrs1
/
python_files_1
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
main.py
109 строк
4 KB
Sergei Uzhva
Add solution for tasks 1 and 2
19 ноя 2025, 18:42
19 ноя 2025, 18:42
fdd4c54
Код
Авторство
О чём код?
from pprint import pprint def parse_recipes(filename): """ Парсинг текстового файла с рецептами и создание словаря из рецептов Файл должен иметь следующий формат: <Название блюда> <Количество ингредиентов> <Название ингредиента> | <Количество> | <Единица измерения> <Название ингредиента> | <Количество> | <Единица измерения> ... <пустая строка> Args: filename (str): Путь к файлу с рецептами. Returns: dict: Словарь, где ключом является название блюда, а значением - список словарей с ингредиентами. Каждый словарь с ингредиентами содержит: - 'ingredient_name' (str): Имя ингредиента. - 'quantity' (int): Количество ингредиента. - 'measure' (str): Единица измерения количества. """ cook_book = {} with open(filename, 'r', encoding='utf-8') as file: while True: dish_name = file.readline().strip() if not dish_name: break # конец файла ingredient_count = int(file.readline().strip()) ingredients = [] for _ in range(ingredient_count): line = file.readline().strip() name, quantity, measure = [part.strip() for part in line.split('|')] ingredients.append({ 'ingredient_name': name, 'quantity': int(quantity), 'measure': measure, }) cook_book[dish_name] = ingredients file.readline() # пустая строка между блюдами return cook_book def get_shop_list_by_dishes(cook_book, dishes, person_count): """ Формирует словарь ингредиентов для списка блюд с учётом количества персон. Args: cook_book (dict): Кулинарная книга такого вида: dishes (list): Список названий блюд, которые нужно приготовить. person_count (int): Количество персон. Returns: dict: Словарь, где ключ — название ингредиента, а значение — словарь: {'measure': <единица измерения>, 'quantity': <количество>} Raises: ValueError если количество персон меньше 1 """ shop_list = {} if person_count <= 0: raise ValueError("person_count должен быть положительным числом.") for dish in dishes: if dish not in cook_book: print(f"Блюдо '{dish}' отсутствует в книге.") continue for ingredient in cook_book[dish]: name = ingredient['ingredient_name'] quantity = ingredient['quantity'] * person_count measure = ingredient['measure'] if name not in shop_list: shop_list[name] = { 'measure': measure, 'quantity': quantity } else: # Если ингредиент уже есть — увеличиваем количество shop_list[name]['quantity'] += quantity return shop_list def main(): cook_book = parse_recipes('recipes.txt') pprint(cook_book) dishes_list = ['Омлет', 'Запеченный картофель', 'Драники', 'Молочный коктейль'] shopping_list = get_shop_list_by_dishes(cook_book, dishes_list, 3) pprint(shopping_list) if __name__ == '__main__': main()