YP sprint 2
unknown
python
4 years ago
3.1 kB
7
Indexable
import datetime as dt
from forex_python.converter import CurrencyRates
class Record:
DATE_FORMAT = '%d.%m.%Y'
def __init__(self, amount, comment, date=None):
if date is None:
date = dt.date.today()
else:
date = dt.datetime.strptime(date, self.DATE_FORMAT).date()
self.amount = amount
self.comment = comment
self.date = date
class Calculator:
def __init__(self, limit):
self.limit = limit
self.records = []
def add_record(self, record):
self.records.append(record)
def get_today_stats(self):
today = dt.date.today()
day_amount = sum([item.amount for item in self.records
if item.date == today])
return day_amount
def get_today_balance(self):
return self.limit - self.get_today_stats()
def get_week_stats(self):
today = dt.date.today()
week_ago_date = today - dt.timedelta(days=7)
week_amount = sum(item.amount for item in self.records
if week_ago_date < item.date <= today)
return week_amount
class CashCalculator(Calculator):
c = CurrencyRates()
USD_RATE = c.get_rate('USD', 'RUB')
EURO_RATE = c.get_rate('EUR', 'RUB')
RUB_RATE = 1
def get_today_stats(self):
today_amount = super().get_today_stats()
return today_amount
def get_week_stats(self):
week_amount = super().get_week_stats()
return week_amount
def get_today_cash_remained(self, currency):
accepted_currencies = {'rub': (self.RUB_RATE, 'руб'),
'usd': (self.USD_RATE, 'USD'),
'eur': (self.EURO_RATE, 'EUR')}
try:
accepted_currencies[currency]
except KeyError:
return 'Неправильная валюта!'
rate, title = accepted_currencies[currency]
today_balance = super().get_today_balance() / rate
if today_balance > 0:
return f'На сегодня осталось {today_balance} {title}'
if today_balance < 0:
return (f'Денег нет, держись: твой долг - {today_balance} '
f'{title}')
return 'Денег нет, держись'
class CaloriesCalculator(Calculator):
def get_today_stats(self):
today_amount = super().get_today_stats()
return f'За сегодня потреблено {today_amount} кКал'
def get_week_stats(self):
week_amount = super().get_week_stats()
return f'За неделю потреблено {week_amount} кКал'
def get_calories_remained(self):
today_balance = super().get_today_balance()
if today_balance > 0:
return (f'Сегодня можно съесть что-нибудь ещё, но с общей '
f'калорийностью не более {today_balance} кКал')
return 'Хватит есть!'Editor is loading...