Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
99 changes: 99 additions & 0 deletions review.py
Original file line number Diff line number Diff line change
@@ -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)
"""