umarov99

Untitled

Aug 17th, 2021
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.14 KB | None | 0 0
  1. import datetime as dt
  2.  
  3. class Record:
  4. """Класс основной информации"""
  5. def __init__(self, amount, comment, date=None):
  6. self.amount = amount
  7. self.comment = comment
  8. if date == None:
  9. now = dt.datetime.now()
  10. self.date = now.date()
  11. else:
  12. date_format = '%d.%m.%Y'
  13. moment = dt.datetime.strptime(date, date_format)
  14. self.date = moment.date()
  15.  
  16.  
  17. class Calculator:
  18. """Маретинский Класс"""
  19. def __init__(self, limit):
  20. self.limit = limit
  21. self.records = []
  22.  
  23. def add_record(self, record):
  24. self.records.append(record)
  25.  
  26. def get_today_stats(self):
  27. total = 0
  28. for record in self.records:
  29. if record.date == dt.datetime.now().date():
  30. total += record.amount
  31. return total
  32.  
  33. def get_week_stats(self):
  34. total = 0
  35. now = dt.datetime.now().date()
  36. week = (now - dt.timedelta(days=7))
  37. for record in self.records:
  38. moment = record.date()
  39. if now >= moment >= week:
  40. total = record.amount
  41. return total
  42.  
  43. class CashCalculator(Calculator):
  44. """Класс для подсчета денег"""
  45. USD_RATE = 60.00
  46. EURO_RATE = 70.00
  47. RUB_RATE = 1.00
  48.  
  49. def get_today_cash_remained(self, currency):
  50. total = self.get_today_stats()
  51.  
  52. if currency == 'rub':
  53. if self.limit > total:
  54. return f'На сегодня осталось {round((self.limit - total) / self.RUB_RATE)} руб'
  55. elif self.limit == total:
  56. return f'Денег нет, держись'
  57. return f'Денег нет, держись: твой долг - {round((total - self.limit) / self.RUB_RATE)} руб'
  58.  
  59. if currency == 'eur':
  60. if self.limit > total:
  61. return f'На сегодня осталось {round((self.limit - total) / self.EURO_RATE)} eur'
  62. elif self.limit == total:
  63. return f'Денег нет, держись'
  64. return f'Денег нет, держись: твой долг - {round((total - self.limit) / self.EURO_RATE)} eur'
  65.  
  66. if currency == 'usd':
  67. if self.limit > total:
  68. return f'На сегодня осталось {round((self.limit - total) / self.USD_RATE)} usd'
  69. elif self.limit == total:
  70. return f'Денег нет, держись'
  71. return f'Денег нет, держись: твой долг - {round((total - self.limit) / self.USD_RATE)} usd'
  72.  
  73. class CaloriesCalculator(Calculator):
  74. """Класс для подсчета калорий"""
  75. def get_calories_remained(self):
  76. total = self.get_today_stats()
  77. answer = self.limit - total
  78. if answer > 0:
  79. return f'Сегодня можно съесть что-нибудь еще, но с общей калорийностью не более {answer} кКал'
  80. if answer <= 0:
  81. return f'Хватит есть!'
  82.  
  83.  
  84. # создадим калькулятор денег с дневным лимитом 1000
  85. cash_calculator = CashCalculator(1000)
  86.  
  87. # дата в параметрах не указана,
  88. # так что по умолчанию к записи
  89. # должна автоматически добавиться сегодняшняя дата
  90. cash_calculator.add_record(Record(amount=145, comment='кофе'))
  91. # и к этой записи тоже дата должна добавиться автоматически
  92. cash_calculator.add_record(Record(amount=300, comment='Серёге за обед'))
  93. # а тут пользователь указал дату, сохраняем её
  94. cash_calculator.add_record(Record(amount=3000,
  95. comment='бар в Танин др',
  96. date='08.11.2019'))
  97. print(cash_calculator.get_today_cash_remained('руб'))
  98. # должно напечататься
  99. # На сегодня осталось 555 руб
Add Comment
Please, Sign In to add comment