Vlad5080

2sprint project calculator

Jul 10th, 2021
903
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.25 KB | None | 0 0
  1. import datetime as dt
  2.  
  3. """
  4. date_format = '%d.%m.%Y'
  5. moment = dt.datetime.strptime('16.12.2019', date_format)  # что-то вроде 2019-12-16 00:00:00
  6. day = moment.date()  # дату: 2019-12-16
  7. now = dt.datetime.now()
  8. print(now)  # время на текущий момент в формате: 2019-01-31 13:33:27.506227
  9. print(now.date())  # текущую дату: 2019-01-31
  10. """
  11.  
  12.  
  13. class Record:
  14.     def __init__(self, amount: int, comment: str, date: dt.date = None) -> None:
  15.         self.amount = amount
  16.         if date is None:
  17.             self.date = dt.datetime.now().date()
  18.         else:
  19.             self.date = dt.datetime.strptime(date, '%d.%m.%Y').date()
  20.         self.comment = comment
  21.  
  22.  
  23. class Calculator:
  24.     def __init__(self, limit) -> None:
  25.         self.limit = limit
  26.         self.records = []
  27.  
  28.     def add_record(self, record: Record) -> None:  # добавление объекта класса Record в конец списка
  29.         self.records.append(record)
  30.  
  31.     def show(self):  # тестовый метод, УДАЛИТЬ ПЕРЕД ОТПРАВКОЙ
  32.         for i in self.records:
  33.             print(f'{i.date} | {i.amount}  | {i.comment}')
  34.  
  35.     def get_today_stats(self) -> int:
  36.         now = dt.datetime.now()
  37.         amount: int = 0
  38.         for i in self.records:
  39.             if i.date == now.date():
  40.                 amount += i.amount
  41.         return amount
  42.  
  43.     def get_week_stats(self) -> str:
  44.         """
  45.        Узнаем дату равно 7 днецй назад с сегодняшнего дня
  46.        включительно (потому и days=6)
  47.        """
  48.         day_week_ago = dt.date.today() - dt.timedelta(days=6)
  49.         today = dt.datetime.now().date()
  50.         amount = 0
  51.         for i in self.records:
  52.             if day_week_ago <= i.date <= today:
  53.                 amount += i.amount
  54.         return f'За неделю с {day_week_ago} по {today} было потрачено: {amount}'
  55.  
  56.  
  57. class CashCalculator(Calculator):
  58.  
  59.     def __init__(self):
  60.         self.EURO_RATE: float = 70.0
  61.         self.USD_RATE: float = 60.0
  62.  
  63.     def get_today_stats(self) -> str:
  64.         pass
  65.  
  66.  
  67.  
  68.     def get_today_cash_remained(self, currency: str) -> str:
  69.  
  70.         needed_currency: str = ''
  71.         money_spend_today = 0
  72.         now = dt.datetime.now()
  73.         for i in self.records:
  74.             if i.date == now.date():
  75.                 money_spend_today += i.amount
  76.         if currency == 'eur':
  77.             needed_currency = 'Euro '
  78.             self.limit = round(self.limit / self.EURO_RATE, 2)
  79.             money_spend_today = round(money_spend_today / self.EURO_RATE, 2)
  80.         elif currency == 'usd':
  81.             needed_currency = 'USD'
  82.             self.limit = round(self.limit / self.USD_RATE, 2)
  83.             money_spend_today = round(money_spend_today / self.USD_RATE, 2)
  84.         else:
  85.             needed_currency = 'руб'
  86.         available_cash: int = self.limit - money_spend_today
  87.         if available_cash < 0:
  88.             return f'Денег нет, держись: твой долг - {abs(available_cash)} {needed_currency}'
  89.         elif available_cash == 0:
  90.             return f'Денег нет, держись'
  91.         else:
  92.             return f'На сегодня осталось {available_cash} {needed_currency}'
  93.  
  94.  
  95. class CaloriesCalculator(Calculator):
  96.     def get_today_stats(self) -> None:
  97.         now = dt.datetime.now()
  98.         amount: int = 0
  99.         for i in self.records:
  100.             if i.date == now.date():
  101.                 amount += i.amount
  102.         return f'Сегодня было употреблено: {amount} калорий'
  103.  
  104.     def get_week_stats(self):
  105.         """
  106.        Узнаем дату равно 7 днецй назад с сегодняшнего дня
  107.        включительно (потому и days=6)
  108.        """
  109.         day_week_ago = dt.date.today() - dt.timedelta(days=6)
  110.         today = dt.datetime.now().date()
  111.         amount = 0
  112.         for i in self.records:
  113.             if day_week_ago <= i.date <= today:
  114.                 amount += i.amount
  115.         return f'За неделю с {day_week_ago} по {today} было употреблено: {amount}'
  116.  
  117.     def get_calories_remained(self):
  118.         calories_eaten = 0
  119.         now = dt.datetime.now()
  120.         for i in self.records:
  121.             if i.date == now.date():
  122.                 calories_eaten += i.amount
  123.         available_calories_to_eat: int = self.limit - calories_eaten
  124.         if available_calories_to_eat <= 0:
  125.             return f'Хватит есть!'
  126.         else:
  127.             return f'Сегодня можно съесть что-нибудь ещё, но с общей калорийностью не более {available_calories_to_eat} кКал'
  128.  
  129. """
  130. # БЛОК ПРОВЕРКИ
  131. r1 = Record(amount=145, comment='Безудержный шопинг', date='17.05.2021')
  132. r2 = Record(amount=1568, comment='Наполнение потребительской корзины', date='17.05.2021')
  133. r3 = Record(amount=691, comment='Катание на такси', date='17.05.2021')
  134. # для CaloriesCalculator
  135. r4 = Record(amount=1186,
  136.            comment='Кусок тортика. И ещё один.',
  137.            date='17.05.2021')
  138. r5 = Record(amount=84, comment='Йогурт.', date='17.05.2021')
  139. r6 = Record(amount=2140, comment='Баночка чипсов.', date='17.05.2021')
  140.  
  141. calc = Calculator(1000)
  142. calc.add_record(r1)
  143. calc.add_record(r2)
  144. calc.add_record(r3)
  145. calc.show()
  146. cash_calc = CashCalculator(5000)
  147. calo_calc = CaloriesCalculator(2500)
  148. cash_calc.add_record(r1)
  149. cash_calc.add_record(r2)
  150. cash_calc.add_record(r3)
  151. calo_calc.add_record(r4)
  152. calo_calc.add_record(r5)
  153. calo_calc.add_record(r6)
  154. # проверка калькулятора денег
  155. cash_calc.show()  # тестовый метод, УДАЛИТЬ ПЕРЕД ОТПРАВКОЙ
  156. print(cash_calc.get_today_stats())
  157. print(cash_calc.get_week_stats())
  158. print(cash_calc.get_today_cash_remained('usd'))
  159. print()
  160. # проверка калькулятора калорий
  161. calo_calc.show()  # тестовый метод, УДАЛИТЬ ПЕРЕД ОТПРАВКОЙ
  162. print(calo_calc.get_today_stats())
  163. print(calo_calc.get_week_stats())
  164. print(calo_calc.get_calories_remained())
  165. """
  166.  
Advertisement
Add Comment
Please, Sign In to add comment