Решение задачи на ООП из курса Яндекс.Практикум - 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 кКал