Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import datetime as dt
- from typing import Optional
- DATE_FORMAT = '%d.%m.%Y'
- TODAY = dt.date.today()
- 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):
- return sum(record.amount for record in self.records if
- record.date == TODAY)
- def get_week_stats(self):
- week_ago = TODAY - dt.timedelta(days=7)
- return sum(record.amount for record in self.records if
- week_ago < record.date <= TODAY)
- def remained(self):
- return self.limit - self.get_today_stats()
- class Record:
- def __init__(self, amount, comment, date: Optional[str] = None):
- self.amount = abs(amount)
- self.comment = comment
- if date is not None:
- self.date = dt.datetime.strptime(date, DATE_FORMAT).date()
- else:
- self.date = dt.date.today()
- class CaloriesCalculator(Calculator):
- def get_calories_remained(self):
- calories_remained = self.remained()
- if calories_remained <= 0:
- return 'Хватит есть!'
- else:
- return ('Сегодня можно съесть что-нибудь ещё, но с общей '
- f'калорийностью не более {calories_remained} кКал'
- .format(calories_remained=self.remained))
- class CashCalculator(Calculator):
- USD_RATE = 60.0
- EURO_RATE = 70.0
- RUB_RATE = 1.0
- def get_today_cash_remained(self, currency):
- cash_remained = self.remained()
- money = {
- 'eur': ('Euro', self.EURO_RATE),
- 'usd': ('USD', self.USD_RATE),
- 'rub': ('руб', self.RUB_RATE),
- }
- sign, rate = money[currency]
- if currency not in money:
- raise KeyError('Валюта не найдена')
- cash_remained = round(cash_remained / rate, 2)
- if cash_remained > 0:
- return f'На сегодня осталось {cash_remained} {sign}'
- if cash_remained < 0:
- cash_remained = abs(cash_remained)
- return f'Денег нет, держись: твой долг - {cash_remained} {sign}'
- else:
- return 'Денег нет, держись'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement