From 422c9b74f7344165bbfd396174e7ac49fa364c87 Mon Sep 17 00:00:00 2001 From: Ardor Date: Thu, 7 May 2026 13:25:15 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8F=20mai?= =?UTF-8?q?n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- zadanie_1.py | 106 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 105 insertions(+), 1 deletion(-) diff --git a/zadanie_1.py b/zadanie_1.py index 5d74f1c..3ba73d8 100644 --- a/zadanie_1.py +++ b/zadanie_1.py @@ -149,4 +149,108 @@ def save_report(filepath: str, report_text: str) -> bool: return True except Exception as e: print(f"Ошибка при сохранении отчета: {e}") - return False \ No newline at end of file + return False + + + # ГЛАВНАЯ ФУНКЦИЯ (демонстрация работы всех 10 функций) +def main(): + print("=== Система анализа заказов интернет-магазина ===\n") + + data_dir = r"C:\Users\Ardor\Desktop\Практика\others" + + # Создаем папку, если её нет + os.makedirs(data_dir, exist_ok=True) + + # Путь к файлу с данными + test_file = os.path.join(data_dir, "orders_data.txt") + + # Создаем тестовый файл с данными, если его нет + if not os.path.exists(test_file): + print("Создаю тестовый файл с данными...") + sample_data = [ + "101, Laptop, 1, 1200.00\n", + "102, Mouse, -2, 25.50\n", # некорректный + "101, Mouse, 1, 25.50\n", + "103, Monitor, 0, 300.00\n", # некорректный + "101, Keyboard, 1, 80.00\n", + "102, Laptop, 1, 1200.00\n", + "104, USB-C Cable, 3, 15.00\n", + "105, , 1, 10.00\n" # пустое имя товара + ] + with open(test_file, 'w', encoding='utf-8') as f: + f.writelines(sample_data) + print(f"Файл создан: {test_file}\n") + + # Шаг 1: Загрузка заказов + print("1. Загружаю заказы из файла...") + raw_orders = load_orders(test_file) + print(f" Загружено записей: {len(raw_orders)}") + + # Шаг 2: Валидация + print("2. Валидация заказов...") + valid_orders = validate_orders(raw_orders) + invalid_count = len(raw_orders) - len(valid_orders) + print(f" Отброшено некорректных записей: {invalid_count}") + print(f" Осталось корректных заказов: {len(valid_orders)}") + + if not valid_orders: + print("Нет корректных заказов для обработки. Завершение.") + return + + # Шаг 3: Группировка по пользователям и расчет трат + print("\n3. Аналитика по пользователям:") + grouped = group_by_user(valid_orders) + print(f" Уникальных пользователей: {len(grouped)}") + for uid, orders_list in grouped.items(): + total_spent = calculate_user_total(orders_list) + print(f" Пользователь {uid}: потратил {total_spent:.2f} руб., заказов: {len(orders_list)}") + + # Шаг 4: Самый дорогой товар + most_expensive = find_most_expensive_item(valid_orders) + print(f"\n4. Самый дорогой товар (по цене за ед.): {most_expensive[0]} — {most_expensive[1]:.2f} руб.") + + # Шаг 5: Уникальные товары + unique_items = get_unique_items(valid_orders) + print(f"\n5. Уникальных товаров в ассортименте: {len(unique_items)}") + print(f" {sorted(unique_items)}") + + # Шаг 6: Применение скидки + print("\n6. Применение скидки 10% ко всем заказам...") + original_total = sum(order['total'] for order in valid_orders) + discounted_orders = apply_discount(valid_orders, 10.0) + discounted_total = sum(order['total'] for order in discounted_orders) + print(f" Общая сумма до скидки: {original_total:.2f} руб.") + print(f" Общая сумма после скидки: {discounted_total:.2f} руб.") + + # Шаг 7: Фильтрация дорогих товаров (цена >= 100) + expensive_orders = filter_by_price_threshold(valid_orders, 100.0) + print(f"\n7. Товаров дороже 100 руб. (за ед.): {len(expensive_orders)}") + for order in expensive_orders: + print(f" - {order['item_name']}: {order['price']:.2f} руб., {order['quantity']} шт.") + + # Шаг 8: Формирование отчета + stats = { + 'unique_users': len(grouped), + 'total_revenue': original_total, + 'most_expensive_item': most_expensive, + 'unique_items': unique_items + } + report_text = generate_report(stats) + + # Шаг 9: Вывод отчета + print("\n" + report_text) + + # Шаг 10: Сохранение отчета в файл + report_path = os.path.join(data_dir, "report.txt") + success = save_report(report_path, report_text) + if success: + print(f"\nОтчет успешно сохранен в файл: {report_path}") + else: + print("\nНе удалось сохранить отчет.") + + print("\n=== Работа программы завершена ===") + + +# Точка входа +if __name__ == "__main__": + main() \ No newline at end of file