dec.py 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. import hashlib
  2. import os
  3. class BankAccount:
  4. def __init__(self, name, balance):
  5. self.name = name
  6. self.__balance = balance
  7. @property
  8. def my_balance(self):
  9. return self.__balance
  10. @my_balance.setter
  11. def my_balance(self, value):
  12. if not isinstance(value, (int, float)):
  13. raise ValueError('Баланс должен быть числом')
  14. @my_balance.deleter
  15. def my_balance(self):
  16. del self.__balance
  17. class MagicBox:
  18. def __init__(self, contents=None):
  19. self._contents = contents
  20. @property
  21. def contents(self):
  22. if self._contents == "rabbit":
  23. return "A magical rabbit!"
  24. else:
  25. return self._contents
  26. @contents.setter
  27. def entity(self, new_contents):
  28. if new_contents == "wishes":
  29. print("Your wishes are granted!")
  30. self._contents = new_contents
  31. else:
  32. print("the magic didn't work this time.")
  33. self._contents = new_contents
  34. class Celsius:
  35. def __init__(self, temp) -> None:
  36. self.__temperature = temp
  37. def to_fahrenheit(self):
  38. return self.__temperature*9/5 + 32
  39. @property
  40. def temperature(self):
  41. return self.__temperature
  42. @temperature.setter
  43. def temperature(self, value):
  44. if value < -273.15:
  45. raise ValueError("Температура должна быть больше 273.15")
  46. else:
  47. self.__temperature = value
  48. class File:
  49. def __init__(self, size_in_bytes):
  50. self._size_in_bytes = size_in_bytes
  51. @property
  52. def size(self):
  53. if self._size_in_bytes < 1024:
  54. return f"{self._size_in_bytes} B"
  55. elif self._size_in_bytes < 1048576:
  56. return "%.2f KB" % (self._size_in_bytes/1024.0)
  57. elif self._size_in_bytes < 1073741824:
  58. return "%.2f MB" % (self._size_in_bytes/1048576.0)
  59. else:
  60. return "%.2f GB" % (self._size_in_bytes/1073741824.0)
  61. @size.setter
  62. def size(self, value):
  63. self._size_in_bytes = value
  64. class Notebook:
  65. def __init__(self, notes: list):
  66. self._notes = notes
  67. @property
  68. def notes_list(self):
  69. for i, j in enumerate(self._notes):
  70. print(f"{i+1}.{j}")
  71. class User:
  72. def __init__(self, name, password) -> None:
  73. self.name = name
  74. self.password = password
  75. @property
  76. def password(self):
  77. raise AttributeError("Пароль можно только менять, нельзя смотреть")
  78. @password.setter
  79. def password(self, plaintext):
  80. salt = os.urandom(32)
  81. self._hashed_password = hashlib.pbkdf2_hmac(
  82. "sha256", plaintext.encode("utf-8"), salt, 100_000
  83. )
  84. class Money:
  85. def __init__(self, dollars, cents):
  86. # self.total_cents = 0
  87. self.total_cents = dollars*100 + cents
  88. @property
  89. def dollars(self):
  90. return self.total_cents//100
  91. @dollars.setter
  92. def dollars(self, value):
  93. if not isinstance(value, (int)):
  94. print("Error dollars")
  95. return
  96. if value < 0:
  97. print("Error dollars")
  98. return
  99. else:
  100. self.total_cents = self.total_cents%100 + value*100
  101. @property
  102. def cents(self):
  103. return self.total_cents%100
  104. @cents.setter
  105. def cents(self, value):
  106. if not isinstance(value, (int)):
  107. print("Error cents")
  108. elif value < 0 or value > 100:
  109. print("Error cents")
  110. else:
  111. self.total_cents = (self.total_cents//100)*100 + value
  112. def __str__(self) -> str:
  113. return f"Ваше состояние составляет {self.total_cents//100} долларов {self.total_cents%100} центов"
  114. def main():
  115. # acc = BankAccount('Ivan', 200)
  116. # print(acc.my_balance)
  117. '''
  118. note = Notebook(['Buy Potato', 'Buy Carrot', 'Wash car'])
  119. note.notes_list
  120. '''
  121. bill = Money(101, 99)
  122. assert isinstance(bill, Money)
  123. print(bill.__dict__.keys())
  124. print(bill) # Ваше состояние составляет 101 долларов 99 центов
  125. print(bill.dollars, bill.cents) # 101 99
  126. print(bill.total_cents)
  127. bill.dollars = 666
  128. print(bill.total_cents)
  129. print(bill) # Ваше состояние составляет 666 долларов 99 центов
  130. bill.cents = 12
  131. print(bill.total_cents)
  132. print(bill) # Ваше состояние составляет 666 долларов 12 центов
  133. print(bill.total_cents)
  134. assert bill.total_cents == 66612
  135. assert list(bill.__dict__.keys()) == ['total_cents']
  136. ken = Money(111, 90)
  137. assert isinstance(ken, Money)
  138. print(ken)
  139. ken.dollars = 'hello' # Error dollars
  140. ken.dollars = 0
  141. print(ken)
  142. ken.cents = [1, 2, 3] # Error cents
  143. ken.cents = 100 # Error cents
  144. ken.cents = 99
  145. print(ken)
  146. '''
  147. box = MagicBox("rubies")
  148. print(box.contents)
  149. print(box._contents)
  150. box.entity = "wishes"
  151. print(box._contents)
  152. print(box.entity)
  153. '''
  154. '''
  155. cel = Celsius(12.0)
  156. cel.temperature = 15
  157. cel.temperature = -300
  158. print(cel.temperature)
  159. '''
  160. if __name__ == '__main__':
  161. main()