/
TomSoyer
/
HW_write_read
Обзор
Документация
Войти
/
TomSoyer
/
HW_write_read
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Write_read.py
109 строк
5 KB
TomSoyer
upload files
30 янв 2026, 11:57
Верифицирован
30 янв 2026, 11:57
53a706a
Код
Авторство
О чём код?
import json from pdb import set_default_backend from xml.etree.ElementTree import indent class CookBook: def __init__(self): self.cook_book = {} def read_recipes(self): with open("cook_book.txt", "r", encoding="UTF8") as f: while True: ingredients = [] recipe = f.readline().strip() for i in range(int(f.readline().strip())): ingredients += [f.readline().strip()] self.cook_book[recipe] = self.write_ingredients_at_dict(ingredients) if f.readline() == "": break return self.cook_book def create_cook_book(self, recipes, ingredients): with open("cook_book.txt", "w" , encoding="UTF8") as f: recipe = recipes + "\n" + str(len(ingredients)) + self.write_ingredients_at_file(ingredients) f.write(recipe) def add_recipe(self, recipes, ingredients): with open("cook_book.txt", "a", encoding="UTF8") as f: recipe = "\n"*2 + recipes + "\n" + str(len(ingredients)) + self.write_ingredients_at_file(ingredients) f.write(recipe) @staticmethod def write_ingredients_at_file(ingredients): recipe = "" for _ingredient in ingredients: list_ingredient = _ingredient.split(" ") ingredient = "" if len(list_ingredient) > 3: for i in range(len(list_ingredient) - 2): ingredient = " ".join(list_ingredient[:-2]) quantity = list_ingredient[-2] measure = list_ingredient[-1] else: ingredient, quantity, measure = _ingredient.split(" ") recipe += "\n" + ingredient + " | " + str(quantity) + " | " + measure return recipe @staticmethod def write_ingredients_at_dict(ingredients): list_ingredients = [] for _ingredient in ingredients: dict_ingredients = {} list_ingredient = _ingredient.split(" | ") ingredient = "" if len(list_ingredient) > 3: for i in range(len(list_ingredient) - 2): ingredient = " ".join(list_ingredient[:-2]) quantity = list_ingredient[-2] measure = list_ingredient[-1] else: ingredient, quantity, measure = _ingredient.split(" | ") dict_ingredients["ingredient_name"] = ingredient dict_ingredients["quantity"] = quantity dict_ingredients["measure"] = measure list_ingredients.append(dict_ingredients) return list_ingredients @staticmethod def get_shop_list_by_dishes(dishes, person_count=1): shop_list = {} recipes = cook_book.read_recipes() for dish in dishes: if dish not in recipes: shop_list[dish] = { f"Рецепта '{dish}' нет в книге рецептов" } continue for ingredient in recipes[dish]: name = ingredient["ingredient_name"] quantity = int(ingredient["quantity"]) * person_count measure = ingredient["measure"] if name not in shop_list: shop_list[name] = { "quantity": quantity, "measure": measure } else: shop_list[name]["quantity"] += quantity print(shop_list) #print(json.dumps(shop_list, ensure_ascii=False, indent=4)) cook_book = CookBook() # cook_book.create_cook_book("Омлет", ["Яйцо 2 шт", "Молоко 100 мл", "Помидор 2 шт"] ) # cook_book.add_recipe("Утка по-пекински", ["Утка 1 шт", "Вода 2 л", "Мед 3 ст.л", "Соевый соус 60 мл"]) # cook_book.add_recipe("Запеченный картофель", ["Картофель 1 кг", "Чеснок 3 зубч", "Сыр гауда 100 г"]) # cook_book.add_recipe("Фахитос", ["Говядина 500 г", "Перец сладкий 1 шт", "Лаваш 2 шт", "Винный уксус 1 ст.л", "Помидор 2 шт"]) #recipes = cook_book.read_recipes() #print(f"Рецепты = {json.dumps(recipes, ensure_ascii=False, indent=4)}") cook_book.get_shop_list_by_dishes(["Омлет", "Фахитос"], 3) cook_book.get_shop_list_by_dishes(["Омлет", "Запеченный картофель"], 3) cook_book.get_shop_list_by_dishes([], 3) cook_book.get_shop_list_by_dishes(["Жареный рак", "Омлет", "Фахитос", "Гамбургер"], 3)