/
sansan1ch
/
2HomeTaskOOP
Обзор
Документация
Войти
/
sansan1ch
/
2HomeTaskOOP
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
2homeTask.py
137 строк
4 KB
Netology
first_commit
04 фев 2026, 08:21
04 фев 2026, 08:21
f9366fa
Код
Авторство
О чём код?
def read_cook_book(filename): cook_book = {} with open(filename, 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): ingredient_line = file.readline().strip() name, quantity, measure = [part.strip() for part in ingredient_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): shop_list = {} for dish in dishes: if dish not in cook_book: print(f"Блюдо '{dish}' не найдено в книге рецептов.") continue for ingredient in cook_book[dish]: name = ingredient['ingredient_name'] measure = ingredient['measure'] quantity = ingredient['quantity'] * person_count if name in shop_list: shop_list[name]['quantity'] += quantity else: shop_list[name] = { 'measure': measure, 'quantity': quantity } return shop_list def merge_files(file_list, output_filename): files_info = [] for filename in file_list: with open(filename, encoding='utf-8') as f: lines = f.readlines() files_info.append((filename, len(lines), lines)) files_info.sort(key=lambda x: x[1]) with open(output_filename, 'w', encoding='utf-8') as out_file: for filename, line_count, lines in files_info: out_file.write(f"{filename}\n") out_file.write(f"{line_count}\n") out_file.writelines(lines) if filename != files_info[-1][0]: out_file.write('\n') if __name__ == '__main__': # === Задача 1 === print("ЗАДАЧА 1: Чтение книги рецептов из файла 'recipes.txt'") cook_book = read_cook_book('recipes.txt') for dish, ingredients in cook_book.items(): print(f"\n{dish}:") for ing in ingredients: print(f" {ing['ingredient_name']} — {ing['quantity']} {ing['measure']}") # === Задача 2 === print("ЗАДАЧА 2: Формирование списка покупок") dishes = ['Запеченный картофель', 'Омлет'] person_count = 2 print(f"\nБлюда: {', '.join(dishes)}") print(f"Количество персон: {person_count}\n") shop_list = get_shop_list_by_dishes(cook_book, dishes, person_count) for ingredient in sorted(shop_list.keys()): info = shop_list[ingredient] print(f"{ingredient}: {info['quantity']} {info['measure']}") # === Задача 3 === print("\n") print("ЗАДАЧА 3: Объединение файлов (пример)") test_files = { '1.txt': ['Строка номер 1 файла номер 1', 'Строка номер 2 файла номер 1'], '2.txt': ['Строка номер 1 файла номер 2'], '3.txt': [ 'Строка номер 1 файла номер 3', 'Строка номер 2 файла номер 3', 'Строка номер 3 файла номер 3' ] } for fname, lines in test_files.items(): with open(fname, 'w', encoding='utf-8') as f: f.write('\n'.join(lines)) print(f"Создан файл '{fname}' с {len(lines)} строками") merge_files(['1.txt', '2.txt', '3.txt'], 'result.txt') print("\nФайлы объединены в 'result.txt' (отсортированы по количеству строк)") print("\nСодержимое файла 'result.txt':") print("-" * 60) with open('result.txt', encoding='utf-8') as f: print(f.read()) print("-" * 60)