diff --git a/README.md b/README.md index ee9d69b..30f6829 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,27 @@ 4. Найденный в соответствии с условием задачи месяц должен выводиться на английском языке в нижнем регистре. Если месяцев несколько, то на вывод они все подаются на английском языке в нижнем регистре в порядке их следования в течение года. ## Автор решения +Латыпов Глеб Маратович +latypov.gm@mail.ru ## Описание реализации +Данный скрипт Python предназначен для анализа данных пользовательских трат и выдачи отчета о месяце(ах), в котором(ых) были зафиксированы наибольшие суммы трат. + +1. Сначала импортирются необходимые библиотеки + - 'json' для работы с данными в формате JSON. + - defaultdict из модуля collections для хранения и обработки пользовательских расходов по месяцам. +2. Определяется словарь month_ab, который сопоставляет числовые значения месяцев с их названиями на английском языке. +3. Определяется главная функция "report(input_file)", которая принимает на вход JSON с и возвращает JSON. +4. В блоке if __name__ == __main__ происходит чтение файла 'format.json' и вызов функции report. ## Инструкция по сборке и запуску решения +1. Убедитесь что у вас установлен Python версии 3.11 и выше +2. Все файлы должны лежать в одном каталоге +3. Подготовьте файл с данными в формате JSON. Назовите его 'format.json' или укажите соответствующее имя в блоке: + if __name__ == '__main__': + result = report('ваш_файл.json') +4. Запуск + - Откройте командную строку (терминал). + - Перейдите в каталог, где расположены файлы + - Запустите программу, выполнив команду > python3 solution.py +5. Вы великолепны :) \ No newline at end of file diff --git a/solution.py b/solution.py new file mode 100644 index 0000000..9b8918e --- /dev/null +++ b/solution.py @@ -0,0 +1,39 @@ +# импорт нужных библиотек +import json +from collections import defaultdict + +month_ab = { + '01':'january', '02':'february', '03':'march', '04':'april', '05':'may', '06':'june', + '07':'july', '08':'august', '09':'september', '10':'october','11':'november','12':'december' + } + +# главная ф-ция, в которую передаются инпут +def report(input_file: json) -> json: + # открываем файл и загружаем данные в переменную data + with open(input_file, 'r') as file: + data = json.load(file) + + # создаем словарь, где будут храниться общие затраты пользователей по месяцам + user_expenses = defaultdict(int) + + # цикл по записям и суммирование трат по месяцем, при условии что status == 'COMPLETED' + for record in data: + if record['status'] == 'COMPLETED': + month = month_ab.get(record['ordered_at'].split('-')[1].lower()) + user_expenses[month] += float(record['total']) + + # находим максимальное значение суммы трат среди всех месяцев + max_expenses = max(user_expenses.values()) + result = {"months": [month for month, expenses in user_expenses.items() if expenses == max_expenses]} + return json.dumps(result) + +# чтение файла .json +if __name__ == '__main__': + result = report('format.json') + print(result) + +# Я не совсем понял условие задания +# "Если максимальная сумма пользовательских трат была в более, чем одном месяце, отчет должен показывать все такие месяцы." +# Написал вам письмо, а вы молчите ((( + + \ No newline at end of file