/
KSelect
/
homeork
Обзор
Документация
Войти
/
KSelect
/
homeork
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
main.py
198 строк
8 KB
KSelect
create main.py
07 окт 2025, 14:42
07 окт 2025, 14:42
d3f76bb
Код
Авторство
О чём код?
def read_cook_book(filename): """ Читает файл с рецептами и возвращает словарь cook_book Args: filename (str): Имя файла с рецептами Returns: dict: Словарь с рецептами в формате cook_book """ cook_book = {} try: with open(filename, 'r', encoding='utf-8') as file: while True: # Читаем название блюда dish_name = file.readline().strip() if not dish_name: break # Читаем количество ингредиентов ingredients_count = int(file.readline().strip()) # Читаем ингредиенты ingredients = [] for _ in range(ingredients_count): line = file.readline().strip() if line: parts = [part.strip() for part in line.split('|')] if len(parts) == 3: ingredient = { 'ingredient_name': parts[0], 'quantity': int(parts[1]), 'measure': parts[2] } ingredients.append(ingredient) cook_book[dish_name] = ingredients # Пропускаем пустую строку между рецептами (если есть) file.readline() except FileNotFoundError: print(f"Файл {filename} не найден") except ValueError as e: print(f"Ошибка в формате файла: {e}") except Exception as e: print(f"Произошла ошибка: {e}") 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: Словарь с ингредиентами и их количеством """ shop_list = {} for dish in dishes: if dish not in cook_book: print(f"Блюдо '{dish}' не найдено в книге рецептов") continue for ingredient in cook_book[dish]: ingredient_name = ingredient['ingredient_name'] quantity = ingredient['quantity'] * person_count measure = ingredient['measure'] if ingredient_name in shop_list: # Если ингредиент уже есть, увеличиваем количество shop_list[ingredient_name]['quantity'] += quantity else: # Добавляем новый ингредиент shop_list[ingredient_name] = { 'measure': measure, 'quantity': quantity } return shop_list def merge_files(file_names, output_filename): """ Объединяет несколько файлов в один, сортируя по количеству строк Args: file_names (list): Список имен файлов для объединения output_filename (str): Имя выходного файла """ files_data = [] # Считываем содержимое всех файлов for filename in file_names: try: with open(filename, 'r', encoding='utf-8') as file: lines = file.readlines() files_data.append({ 'filename': filename, 'line_count': len(lines), 'content': lines }) except FileNotFoundError: print(f"Файл {filename} не найден") continue # Сортируем по количеству строк files_data.sort(key=lambda x: x['line_count']) # Записываем в выходной файл try: with open(output_filename, 'w', encoding='utf-8') as output_file: for file_data in files_data: output_file.write(f"{file_data['filename']}\n") output_file.write(f"{file_data['line_count']}\n") output_file.writelines(file_data['content']) # Добавляем пустую строку между файлами для читаемости if file_data != files_data[-1]: output_file.write('\n') except Exception as e: print(f"Ошибка при записи выходного файла: {e}") def main(): """Основная функция для демонстрации работы всех задач""" # Задача 1: Чтение рецептов print("=== Задача 1: Чтение рецептов ===") cook_book = read_cook_book('recipes.txt') if cook_book: print("Рецепты успешно загружены:") for dish, ingredients in cook_book.items(): print(f"\n{dish}:") for ingredient in ingredients: print(f" - {ingredient['ingredient_name']}: {ingredient['quantity']} {ingredient['measure']}") else: print("Не удалось загрузить рецепты") # Задача 2: Список покупок print("\n=== Задача 2: Список покупок ===") dishes = ['Запеченный картофель', 'Омлет'] person_count = 2 shop_list = get_shop_list_by_dishes(cook_book, dishes, person_count) if shop_list: print(f"Список покупок для {person_count} персон на блюда {dishes}:") for ingredient, info in shop_list.items(): print(f"{ingredient}: {info['quantity']} {info['measure']}") else: print("Список покупок пуст") # Задача 3: Объединение файлов print("\n=== Задача 3: Объединение файлов ===") input_files = ['1.txt', '2.txt', '3.txt'] # Замените на ваши файлы output_file = 'result.txt' # Создадим примеры файлов для демонстрации (если они не существуют) create_sample_files(input_files) merge_files(input_files, output_file) print(f"Файлы объединены в {output_file}") def create_sample_files(file_names): """Создает примеры файлов для демонстрации (если они не существуют)""" sample_contents = { '1.txt': ['Строка номер 1 файла номер 1\n', 'Строка номер 2 файла номер 1\n'], '2.txt': ['Строка номер 1 файла номер 2\n'], '3.txt': [ 'Строка номер 1 файла номер 3\n', 'Строка номер 2 файла номер 3\n', 'Строка номер 3 файла номер 3\n' ] } for filename in file_names: try: with open(filename, 'r', encoding='utf-8'): pass # Файл существует except FileNotFoundError: # Создаем файл с примером содержимого if filename in sample_contents: with open(filename, 'w', encoding='utf-8') as f: f.writelines(sample_contents[filename]) print(f"Создан пример файла {filename}") if __name__ == '__main__': main()