Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,27 @@
4. Найденный в соответствии с условием задачи месяц должен выводиться на английском языке в нижнем регистре. Если месяцев несколько, то на вывод они все подаются на английском языке в нижнем регистре в порядке их следования в течение года.

## Автор решения
Латыпов Глеб Маратович
[email protected]

## Описание реализации
Данный скрипт 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. Вы великолепны :)
39 changes: 39 additions & 0 deletions solution.py
Original file line number Diff line number Diff line change
@@ -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)

# Я не совсем понял условие задания
# "Если максимальная сумма пользовательских трат была в более, чем одном месяце, отчет должен показывать все такие месяцы."
# Написал вам письмо, а вы молчите (((