Skip to content

Latest commit

 

History

History

Yandex_oop_calculator

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

README.md

hw_python_oop - Калькулятор денег и калорий спринт 2 в Яндекс.Практикум

Спринт 2 - Калькулятор денег и калорий

Решение задачи на ООП из курса Яндекс.Практикум - Python-разработчик.

Постановка задачи:

Создайте два калькулятора: для подсчёта денег и калорий. Пользовательскую часть калькуляторов, их «лицо», писать не нужно, напишите только логику — отдельный класс для каждого из калькуляторов.

Калькулятор денег должен уметь:

  • Сохранять новую запись о расходах методом add_record()
  • Считать, сколько денег потрачено сегодня методом get_today_stats()
  • Определять, сколько ещё денег можно потратить сегодня в рублях, долларах или евро — метод get_today_cash_remained(currency)
  • Считать, сколько денег потрачено за последние 7 дней — метод get_week_stats()

Калькулятор калорий должен уметь:

  • Сохранять новую запись о приёме пищи — метод add_record()
  • Считать, сколько калорий уже съедено сегодня — метод get_today_stats()
  • Определять, сколько ещё калорий можно/нужно получить сегодня — метод get_calories_remained()
  • Считать, сколько калорий получено за последние 7 дней — метод get_week_stats()

У калькуляторов много пересекающихся функций: они должны уметь хранить какие-то записи (о еде или деньгах, но по сути - всё числа и даты), знать дневной лимит (сколько в день можно истратить денег или сколько калорий можно получить) и суммировать записи за конкретные даты.

Всю эту общую функциональность заложите в родительский класс Calculator, а от него унаследуйте классы CaloriesCalculator и CashCalculator.

Конструктор класса Calculator должен принимать один аргумент — число limit (дневной лимит трат/калорий, который задал пользователь). В конструкторе создайте пустой список, в котором потом будут храниться записи (назовите его records).

Чтобы было удобнее создавать записи, создайте для них отдельный класс Record. В нём сохраните:

  • число amount (денежная сумма или количество килокалорий),
  • дату создания записи date (передаётся в явном виде в конструктор, либо присваивается значение по умолчанию — текущая дата),
  • комментарий comment, поясняющий, на что потрачены деньги или откуда взялись калории.

Подробнее о формате вывода

Метод get_calories_remained() калькулятора калорий должен возвращать ответы:

  • «Сегодня можно съесть что-нибудь ещё, но с общей калорийностью не более N кКал», если лимит limit не достигнут,
  • «Хватит есть!», если лимит достигнут или превышен,

Метод get_today_cash_remained(currency) денежного калькулятора должен принимать на вход код валюты: одну из строк "rub", "usd" или "eur". Возвращает он сообщение о состоянии дневного баланса в этой валюте, округляя сумму до двух знаков после запятой (до сотых):

  • «На сегодня осталось N руб/USD/Euro» — в случае, если лимит limit не достигнут,
  • «Денег нет, держись», если лимит достигнут,
  • «Денег нет, держись: твой долг - N руб/USD/Euro», если лимит превышен.

Примеры работы скрипта:

if __name__ == "__main__":
    limit = 1000
    cash_calculator = CashCalculator(limit)
    calories_calculator = CaloriesCalculator(limit)

    # записи для денег
    r1 = Record(amount=145, comment='кофе')
    r2 = Record(amount=300, comment='Серёге за обед')
    r3 = Record(
        amount=3000,
        comment='Бар на Танин день рождения',
        date='08.11.2022')

    # записи для калорий
    r4 = Record(
        amount=118,
        comment='Кусок тортика. И ещё один.')
    r5 = Record(
        amount=84,
        comment='Йогурт.')
    r6 = Record(
        amount=1140,
        comment='Баночка чипсов.',
        date='24.02.2019')

    cash_calculator.add_record(r1)
    cash_calculator.add_record(r2)
    cash_calculator.add_record(r3)

    calories_calculator.add_record(r4)
    calories_calculator.add_record(r5)
    calories_calculator.add_record(r6)

    # вывод результатов
    print(cash_calculator.get_today_cash_remained('rub'))
    print(calories_calculator.get_calories_remained())

Вывод:

На сегодня осталось 555.0 руб
Сегодня можно съесть что-нибудь ещё, но с общей калорийностью не более 798 кКал