diff --git a/review.py b/review.py new file mode 100644 index 0000000..8a1d224 --- /dev/null +++ b/review.py @@ -0,0 +1,99 @@ +import datetime as dt + + +class Record: + def __init__(self, amount, comment, date=''): + self.amount = amount + self.date = ( + dt.datetime.now().date() if + not + date else dt.datetime.strptime(date, '%d.%m.%Y').date()) + self.comment = comment + + """ + Ненужные переносы снижают восприятие: + self.date = ( + dt.datetime.now().date() + if not date + else dt.datetime.strptime(date, '%d.%m.%Y').date()) + + Я бы заменил всё на: + if date: + self.date = dt.datetime.strptime(date, '%d.%m.%Y').date() + else: + self.date = dt.datetime.now().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): + return sum([rec.amount for rec in self.records if rec.date == dt.datetime.now().date()]) + + def get_week_stats(self): + today = dt.datetime.now().date() + return sum([rec.amount for rec in self.records if 7 > (today - rec.date).days >= 0]) + +class CaloriesCalculator(Calculator): + def get_calories_remained(self): # Получает остаток калорий на сегодня + x = self.limit - self.get_today_stats() + if x > 0: + return f'Сегодня можно съесть что-нибудь' \ + f' ещё, но с общей калорийностью не более {x} кКал' + else: + return ('Хватит есть!') + +class CashCalculator(Calculator): + USD_RATE = float(60) # Курс доллар США. + EURO_RATE = float(70) # Курс Евро. + def get_today_cash_remained(self, currency, + USD_RATE=USD_RATE, EURO_RATE=EURO_RATE): + cash_remained = self.limit - self.get_today_stats() + + d = {'usd': (USD_RATE, 'USD'), 'eur': (EURO_RATE, 'Euro'), 'rub': (1.0, 'руб')} + + rate = d.get(currency) + if rate is None: + return f'Неизвестная валюта {currency}' + + cash_remained /= rate[0] + currency_type = d.get(currency)[1] + + if cash_remained > 0: + return ( + f'На сегодня осталось {round(cash_remained, 2)} ' + f'{currency_type}' + ) + elif cash_remained == 0: + return 'Денег нет, держись' + elif cash_remained < 0: + return 'Денег нет, держись:' \ + ' твой долг - {0:.2f} {1}'.format(-cash_remained, + currency_type) + + """ + Куча текста мешает восприятию. Я бы заменил на: + ... + if cash_remained > 0: + return ( f'На сегодня осталось {round(cash_remained, 2)} ' f'{currency_type}') + elif cash_remained == 0: + return 'Денег нет, держись' + elif cash_remained < 0: + return 'Денег нет, держись:' \ + ' твой долг - {0:.2f} {1}'.format(-cash_remained, currency_type) + return None + """ + + def get_week_stats(self): + super().get_week_stats() + +""" +Названия классов Calculator, CaloriesCalculator(Calculator),CashCalculator(Calculator) +делают код менее читаемым из-за длинных и повторяющихся слов. +Я бы назвал Calc, Calories_сalc(Calculator), Cash_calc(Calculator) +""" \ No newline at end of file