From 4aabd6784893006ce848f212172e016b6425fb66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9D=D0=B0=D1=82=D0=B0=D0=BB=D1=8C=D1=8F=20=D0=9A=D1=83?= =?UTF-8?q?=D0=B7=D1=8C=D0=BC=D0=B8=D0=BD=D0=B0?= Date: Sun, 28 Apr 2024 14:31:34 +0300 Subject: [PATCH 1/2] add solution --- README.md | 15 +++++++++++++++ src/input.json | 38 ++++++++++++++++++++++++++++++++++++++ src/report.py | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 87 insertions(+) create mode 100644 src/input.json create mode 100644 src/report.py diff --git a/README.md b/README.md index ee9d69b..fd7fd21 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,22 @@ 4. Найденный в соответствии с условием задачи месяц должен выводиться на английском языке в нижнем регистре. Если месяцев несколько, то на вывод они все подаются на английском языке в нижнем регистре в порядке их следования в течение года. ## Автор решения +Куьмина Наталья Вячеславовна ## Описание реализации + 1. Для генерации этого отчета используется функция generate_report(data), которая принимает входные данные и возвращает строку в формате JSON. + 2. Сначала открывается файл input.json и загружаются данные о заказах в формате JSON. Для этого используется стандартный модуль Python json. + 3. Данные содержат заказы с разными статусами. Программа отбирает только те заказы, которые имеют статус "COMPLETED" (завершенный заказ). Другие статусы, такие как "CANCELED", "CREATED", или "DELIVERY", игнорируются. + 4. Создается словарь словарь для хранения суммарных трат по месяцам. Используя модуль datetime, преобразуется строковое представление даты заказа в объект datetime. Затем извлекаются из этого объекта название месяца (в нижнем регистре) и суммирует значения поля "total", которое содержит общую стоимость заказа. + 5. По итогу создается отчет в формате JSON, содержащий список месяцев с максимальными тратами. + ## Инструкция по сборке и запуску решения + +1. Сохраните JSON-файл с данными о заказах в файл input.json. +2. Запустите Python-скрипт report.py для выполнения отчета: + +``` +cd src +python report.py + ``` \ No newline at end of file diff --git a/src/input.json b/src/input.json new file mode 100644 index 0000000..6dbf226 --- /dev/null +++ b/src/input.json @@ -0,0 +1,38 @@ +[ + { + "user_id": "3acfb0b7-04bd-4978-be4c-3929372277c1", + "ordered_at": "2023-01-16T13:56:39.492", + "status": "COMPLETED", + "total": "1917.00" + }, + { + "user_id": "25b003b9-ab22-4a24-a616-dd0303f983d8", + "ordered_at": "2023-03-05T08:34:21.123", + "status": "COMPLETED", + "total": "13990.00" + }, + { + "user_id": "e1470ada-fcbb-4424-8c46-065b6409ca4b", + "ordered_at": "2016-03-16T13:56:39.492", + "status": "COMPLETED", + "total": "215.50" + }, + { + "user_id": "081a47a5-b7bf-462c-a11a-68002a179152", + "ordered_at": "2023-12-08T21:36:59.281", + "status": "COMPLETED", + "total": "49499.00" + }, + { + "user_id": "0999c6aa-1bac-4ded-9a54-92fff4f34d69", + "ordered_at": "2023-12-14T11:10:29.408", + "status": "CANCELED", + "total": "13650.00" + }, + { + "user_id": "0999c6aa-1bac-4ded-9a54-92fff4f34d69", + "ordered_at": "2023-12-14T11:15:31.108", + "status": "COMPLETED", + "total": "14760.00" + } +] \ No newline at end of file diff --git a/src/report.py b/src/report.py new file mode 100644 index 0000000..2c4253b --- /dev/null +++ b/src/report.py @@ -0,0 +1,34 @@ +import json +from collections import defaultdict +from datetime import datetime + +# Функция для формирования отчета о месяцах с наибольшими тратами +def generate_report(data): + # Словарь для хранения общей суммы трат по месяцам + monthly_expenses = defaultdict(float) + + # Обработка данных + for record in data: + if record["status"] == "COMPLETED": + order_date = datetime.fromisoformat(record["ordered_at"]) + month = order_date.strftime("%B").lower() + monthly_expenses[month] += float(record["total"]) + + # Определение максимальной суммы трат + max_expense = max(monthly_expenses.values()) + + # Определение месяцев с максимальными тратами + max_months = [month for month, expense in monthly_expenses.items() if expense == max_expense] + + return json.dumps({"months": sorted(max_months)}) + +def run_report(): + with open("input.json", "r") as f: + data = json.load(f) + + report = generate_report(data) + + print("Наибольший период трат:", report) + +if __name__ == "__main__": + run_report() From c73693106b3494485881244c4ef5299e5461b966 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9D=D0=B0=D1=82=D0=B0=D0=BB=D1=8C=D1=8F=20=D0=9A=D1=83?= =?UTF-8?q?=D0=B7=D1=8C=D0=BC=D0=B8=D0=BD=D0=B0?= Date: Sun, 28 Apr 2024 14:54:55 +0300 Subject: [PATCH 2/2] fix readme.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fd7fd21..ec49881 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ 4. Найденный в соответствии с условием задачи месяц должен выводиться на английском языке в нижнем регистре. Если месяцев несколько, то на вывод они все подаются на английском языке в нижнем регистре в порядке их следования в течение года. ## Автор решения -Куьмина Наталья Вячеславовна +Кузьмина Наталья Вячеславовна ## Описание реализации