dec.py 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325
  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. """Вычисляемые войства"""
  115. class Square:
  116. def __init__(self, a) -> None:
  117. self.__side = a
  118. self.__area = None
  119. self.__perimeter = None
  120. @property
  121. def side(self):
  122. return self.__side
  123. @side.setter
  124. def side(self, value):
  125. self.__side = value
  126. self.__area = None
  127. self.__perimeter = None
  128. @property
  129. def area(self):
  130. if self.__area == None:
  131. print('calculate area')
  132. self.__area = self.__side**2
  133. return self.__area
  134. @property
  135. def perimeter(self):
  136. if self.__perimeter == None:
  137. print('calculate perimeter')
  138. self.__perimeter = self.__side*4
  139. return self.__perimeter
  140. class Rectangle:
  141. def __init__(self, length, width):
  142. self.__length = length
  143. self.__width = width
  144. self.__area = None
  145. @property
  146. def area(self):
  147. if self.__area == None:
  148. self.__area = self.__length*self.__width
  149. return self.__area
  150. class Date:
  151. def __init__(self, day, month, year) -> None:
  152. self.day = day
  153. self.month = month
  154. self.year = year
  155. @property
  156. def date(self):
  157. return "%02d/%02d/%04d" % (self.day, self.month, self.year)
  158. @property
  159. def usa_date(self):
  160. return "%02d-%02d-%04d" % (self.month, self.day, self.year)
  161. class Password:
  162. def __init__(self, password) -> None:
  163. self.__password = password
  164. @property
  165. def password(self):
  166. return self.__password
  167. @password.setter
  168. def password(self, value):
  169. self.__password = value
  170. @property
  171. def strength(self):
  172. if len(self.password) < 8:
  173. return "Weak"
  174. elif len(self.password) >= 12:
  175. return "Strong"
  176. else:
  177. return "Medium"
  178. def main():
  179. pass_1 = Password("Alligator34")
  180. assert pass_1.password == "Alligator34"
  181. assert pass_1.strength == "Medium"
  182. assert len(pass_1.__dict__) == 1, 'У ЭК должен храниться только один атрибут'
  183. pass_2 = Password("Alligator345678")
  184. assert pass_2.password == "Alligator345678"
  185. assert pass_2.strength == "Strong"
  186. pass_1.password = "123"
  187. assert pass_1.strength == "Weak"
  188. assert len(pass_2.__dict__) == 1, 'У ЭК должен храниться только один атрибут'
  189. pass_3 = Password("345678")
  190. assert pass_3.strength == "Weak"
  191. print('Good')
  192. assert len(pass_3.__dict__) == 1, 'У ЭК должен храниться только один атрибут'
  193. # acc = BankAccount('Ivan', 200)
  194. # print(acc.my_balance)
  195. '''
  196. date = Date(3, 4, 2001)
  197. print(date.date)
  198. print(date.usa_date)
  199. '''
  200. # one_dollar = 1
  201. # print(f"{one_dollar:05}")
  202. '''
  203. note = Notebook(['Buy Potato', 'Buy Carrot', 'Wash car'])
  204. note.notes_list
  205. '''
  206. '''
  207. bill = Money(101, 99)
  208. assert isinstance(bill, Money)
  209. print(bill.__dict__.keys())
  210. print(bill) # Ваше состояние составляет 101 долларов 99 центов
  211. print(bill.dollars, bill.cents) # 101 99
  212. print(bill.total_cents)
  213. bill.dollars = 666
  214. print(bill.total_cents)
  215. print(bill) # Ваше состояние составляет 666 долларов 99 центов
  216. bill.cents = 12
  217. print(bill.total_cents)
  218. print(bill) # Ваше состояние составляет 666 долларов 12 центов
  219. print(bill.total_cents)
  220. assert bill.total_cents == 66612
  221. assert list(bill.__dict__.keys()) == ['total_cents']
  222. ken = Money(111, 90)
  223. assert isinstance(ken, Money)
  224. print(ken)
  225. ken.dollars = 'hello' # Error dollars
  226. ken.dollars = 0
  227. print(ken)
  228. ken.cents = [1, 2, 3] # Error cents
  229. ken.cents = 100 # Error cents
  230. ken.cents = 99
  231. print(ken)
  232. '''
  233. '''
  234. box = MagicBox("rubies")
  235. print(box.contents)
  236. print(box._contents)
  237. box.entity = "wishes"
  238. print(box._contents)
  239. print(box.entity)
  240. '''
  241. '''
  242. cel = Celsius(12.0)
  243. cel.temperature = 15
  244. cel.temperature = -300
  245. print(cel.temperature)
  246. '''
  247. if __name__ == '__main__':
  248. main()