Добавлена функция main
This commit is contained in:
parent
abecc37deb
commit
422c9b74f7
106
zadanie_1.py
106
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
|
||||
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()
|
||||
Loading…
Reference in New Issue
Block a user