Python flask

Выполнен
Заказ
5557620
Раздел
Программирование
Предмет
Тип работы
Антиплагиат
Не указан
Срок сдачи
13 Сен 2023 в 21:55
Цена
1 000 ₽
Блокировка
5 дней
Размещен
12 Сен 2023 в 17:34
Просмотров
77
Описание работы

"""

Реализуйте приложение для учёта финансов, умеющее запоминать, сколько денег было потрачено за день,

а также показывать затраты за отдельный месяц и за целый год.


В программе должно быть три endpoints:


/add// — сохранение информации о совершённой в рублях трате за какой-то день;

/calculate/ — получение суммарных трат за указанный год;

/calculate// — получение суммарных трат за указанные год и месяц.


Дата для /add/ передаётся в формате YYYYMMDD, где YYYY — год, MM — месяц (от 1 до 12), DD — число (от 01 до 31).

Гарантируется, что переданная дата имеет такой формат и она корректна (никаких 31 февраля).

"""

import datetime

from flask import Flask


app = Flask(__name__)


storage = {}


@app.route("/add//")

def add(date: str, number: int) -> str:

year = int(date[:4])

month = int(date[4:6])

day = int(date[6:8])

if check_date(year, month, day):

storage.setdefault(year, {}).setdefault(month, 0)

storage[year][month] += number

return f"Данные записаны: {storage}"

else:

return "Введенная дата некорректна. Повторите ввод даты!"


@app.route("/calculate/")

def calculate_year(year: int) -> str:

try:

expense = sum(storage[year].values())

return f"Траты за {year} год: {expense} рублей"

except KeyError:

return f'Нет данных за {year} год'


@app.route("/calculate//")

def calculate_month(year: int, month: int) -> str:

try:

return f"Траты за {year} год и {month} месяц: {storage[year][month]} рублей"

except KeyError:

return f'Нет данных за {year} год и {month} месяц.'


def check_date(year, month, day):

"""Date validator"""

try:

datetime.datetime(year, month, day)

correct_date = True

except ValueError:

correct_date = False

return correct_date


if __name__ == "__main__":

app.run(debug=True)


Есть необходимость доработать код для устранения таких замечаний:

В чем суть замечания - сейчас вы каждый раз пересчитываете все траты за год с помощью sum (он неявно проходится по всем значениям циклом): это O(N).


Можно немного поменять структуру storage так, чтобы суммарные затраты считались мгновенно: за O(1).

в storage[year] можно сразу хранить суммарные траты.

Оставьте, пожалуйста, как можно более подробный комментарий к изменениям.

Нужна такая же работа?
  • Разместите заказ
  • Выберите исполнителя
  • Получите результат
Гарантия на работу 1 год
Средний балл 4.96
Стоимость Назначаете сами
Эксперт Выбираете сами
Уникальность работы от 70%
Время выполнения заказа:
2 часа 4 минуты
Выполнен в срок
Отзыв о выполненном заказе
Нужна аналогичная работа?
Оформи быстрый заказ и узнай стоимость
Гарантированные бесплатные доработки
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Темы журнала
Показать ещё
Прямой эфир