├── README.md └── main.py /README.md: -------------------------------------------------------------------------------- 1 | # Тестовое задание на позицию код-ревьюера Яндекс.Практикум 2 | 3 | ### Дано 4 | * В файле `main.py` находится пример реального кода, который сдал студент к заданию. 5 | * Текст задания находится по [ссылке](https://docs.google.com/document/d/1sEithgM7bJbBqEZYOEOJzUuvFD3iyy_Pf2iGv7aWhsE/edit?usp=sharing) 6 | * Общие требования к коду, с которыми ознакамливаются студенты, находятся по [ссылке](https://docs.google.com/document/d/1s_FqVkqOASwXK0DkOJZj5RzOm4iWBO5voc_8kenxXbw/edit) 7 | 8 | ### Что нужно сделать 9 | * Нужно провести ревью этого кода. Найти в нем ошибки, неточности, неэффективные места, или дать какие-то необязательные рекомендации по улучшению. 10 | * Можно сделать форк репозитория или gist _(не делайте Pull Request в этот репозиторий)_ и расставить комментарии _над_ проблемными строками в `main.py`. 11 | * Учтите, что вы "ревьюите" студента, то есть не надо просто исправлять ошибки, нужно оставлять комментарии и рекомендации. 12 | 13 | ### Как сдавать 14 | * В форме прикрепите ссылку на ваш репозиторий или на gist с комментариями. 15 | -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | import datetime as dt 2 | 3 | 4 | class Record: 5 | def __init__(self, amount, comment, date=''): 6 | self.amount = amount 7 | self.date = ( 8 | dt.datetime.now().date() if 9 | not 10 | date else dt.datetime.strptime(date, '%d.%m.%Y').date()) 11 | self.comment = comment 12 | 13 | 14 | class Calculator: 15 | def __init__(self, limit): 16 | self.limit = limit 17 | self.records = [] 18 | 19 | def add_record(self, record): 20 | self.records.append(record) 21 | 22 | def get_today_stats(self): 23 | today_stats = 0 24 | for Record in self.records: 25 | if Record.date == dt.datetime.now().date(): 26 | today_stats = today_stats + Record.amount 27 | return today_stats 28 | 29 | def get_week_stats(self): 30 | week_stats = 0 31 | today = dt.datetime.now().date() 32 | for record in self.records: 33 | if ( 34 | (today - record.date).days < 7 and 35 | (today - record.date).days >= 0 36 | ): 37 | week_stats += record.amount 38 | return week_stats 39 | 40 | 41 | class CaloriesCalculator(Calculator): 42 | def get_calories_remained(self): # Получает остаток калорий на сегодня 43 | x = self.limit - self.get_today_stats() 44 | if x > 0: 45 | return f'Сегодня можно съесть что-нибудь' \ 46 | f' ещё, но с общей калорийностью не более {x} кКал' 47 | else: 48 | return('Хватит есть!') 49 | 50 | 51 | class CashCalculator(Calculator): 52 | USD_RATE = float(60) # Курс доллар США. 53 | EURO_RATE = float(70) # Курс Евро. 54 | 55 | def get_today_cash_remained(self, currency, 56 | USD_RATE=USD_RATE, EURO_RATE=EURO_RATE): 57 | currency_type = currency 58 | cash_remained = self.limit - self.get_today_stats() 59 | if currency == 'usd': 60 | cash_remained /= USD_RATE 61 | currency_type = 'USD' 62 | elif currency_type == 'eur': 63 | cash_remained /= EURO_RATE 64 | currency_type = 'Euro' 65 | elif currency_type == 'rub': 66 | cash_remained == 1.00 67 | currency_type = 'руб' 68 | if cash_remained > 0: 69 | return ( 70 | f'На сегодня осталось {round(cash_remained, 2)} ' 71 | f'{currency_type}' 72 | ) 73 | elif cash_remained == 0: 74 | return 'Денег нет, держись' 75 | elif cash_remained < 0: 76 | return 'Денег нет, держись:' \ 77 | ' твой долг - {0:.2f} {1}'.format(-cash_remained, 78 | currency_type) 79 | 80 | def get_week_stats(self): 81 | super().get_week_stats() 82 | --------------------------------------------------------------------------------