method_task.py 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. from string import digits, ascii_letters
  2. class Registration:
  3. def __init__(self, login, password) -> None:
  4. self.login = login
  5. self.password = password
  6. @property
  7. def login(self):
  8. return self.__login
  9. @login.setter
  10. def login(self, value: str):
  11. if not isinstance(value, str):
  12. raise TypeError
  13. if '@' not in value:
  14. raise ValueError
  15. if value.rfind('.') < value.rfind('@'):
  16. raise ValueError
  17. self.__login = value
  18. @staticmethod
  19. def is_include_digit(value: str):
  20. for i in value:
  21. if i in digits:
  22. return True
  23. return False
  24. @staticmethod
  25. def is_include_all_register(value: str):
  26. upper = False
  27. lower = False
  28. for i in value:
  29. if not lower:
  30. lower = i.islower()
  31. if not upper:
  32. upper = i.isupper()
  33. return lower and upper
  34. @staticmethod
  35. def is_include_only_latin(value: str):
  36. for i in value:
  37. if not i.isdigit():
  38. if i not in ascii_letters:
  39. return False
  40. return True
  41. @staticmethod
  42. def check_password_dictionary(value: str):
  43. with open('easy_passwords.txt', 'r', encoding='utf-8') as f:
  44. password_list = f.read().split('\n')
  45. return value in password_list
  46. @property
  47. def password(self):
  48. return self.__password
  49. @password.setter
  50. def password(self, value: str):
  51. if not isinstance(value, str):
  52. raise TypeError("Пароль должен быть строкой")
  53. if len(value) < 5 or len(value) > 11:
  54. raise ValueError("Пароль должен быть длиннее 4 и меньше 12 символов")
  55. if not self.is_include_digit(value):
  56. raise ValueError("Пароль должен содержать хотя бы одну цифру")
  57. if not self.is_include_all_register(value):
  58. raise ValueError("Пароль должен содержать хотя бы один символ верхнего и нижнего регистра")
  59. if not self.is_include_only_latin(value):
  60. raise ValueError("Пароль должен содержать только латинский алфавит")
  61. if self.check_password_dictionary(value):
  62. raise ValueError("Ваш пароль содержится в списке самых легких")
  63. self.__password = value
  64. def check_password_dictionary(value: str):
  65. with open('easy_passwords.txt', 'r', encoding='utf-8') as f:
  66. password_list = f.read().split('\n')
  67. print(password_list)
  68. # password_list = open('easy_passwords.txt', 'r', encoding='utf-8').read().split('\n')
  69. return value in password_list
  70. def main():
  71. # reg = Registration('asdfa@sfsdf.werwe', 'QwerTy123')
  72. # reg = Registration('asdfa@sfsdf.werwe', 'QwerTy123')
  73. # print(reg.login)
  74. # print(reg.password)
  75. # print(check_password_dictionary('124244242'))
  76. # print(check_password_dictionary('as1SNdf'))
  77. try:
  78. s2 = Registration("fga", "asd12")
  79. except ValueError as e:
  80. pass
  81. else:
  82. raise ValueError("Registration('fga', 'asd12') как можно записать такой логин?")
  83. try:
  84. s2 = Registration("fg@a", "asd12")
  85. except ValueError as e:
  86. pass
  87. else:
  88. raise ValueError("Registration('fg@a', 'asd12') как можно записать такой логин?")
  89. s2 = Registration("translate@gmail.com", "as1SNdf")
  90. try:
  91. s2.login = "asdsa12asd."
  92. except ValueError as e:
  93. pass
  94. else:
  95. raise ValueError("asdsa12asd как можно записать такой логин?")
  96. try:
  97. s2.login = "asdsa12@asd"
  98. except ValueError as e:
  99. pass
  100. else:
  101. raise ValueError("asdsa12@asd как можно записать такой логин?")
  102. assert Registration.check_password_dictionary('QwerTy123'), 'проверка на пароль в слове не работает'
  103. try:
  104. s2.password = "QwerTy123"
  105. except ValueError as e:
  106. pass
  107. else:
  108. raise ValueError("QwerTy123 хранится в словаре паролей, как его можно было сохранить?")
  109. try:
  110. s2.password = "KissasSAd1f"
  111. except ValueError as e:
  112. pass
  113. else:
  114. raise ValueError("KissasSAd1f хранится в словаре паролей, как его можно было сохранить?")
  115. try:
  116. s2.password = "124244242"
  117. except ValueError as e:
  118. pass
  119. else:
  120. raise ValueError("124244242 пароль НЕОЧЕНЬ, как его можно было сохранить?")
  121. try:
  122. s2.password = "RYIWUhjkdbfjfgdsffds"
  123. except ValueError as e:
  124. pass
  125. else:
  126. raise ValueError("RYIWUhjkdbfjfgdsffds пароль НЕОЧЕНЬ, как его можно было сохранить?")
  127. try:
  128. s2.password = "CaT"
  129. except ValueError as e:
  130. pass
  131. else:
  132. raise ValueError("CaT пароль НЕОЧЕНЬ, как его можно было сохранить?")
  133. try:
  134. s2.password = "monkey"
  135. except ValueError as e:
  136. pass
  137. else:
  138. raise ValueError("monkey пароль НЕОЧЕНЬ, как его можно было сохранить?")
  139. try:
  140. s2.password = "QwerTy123"
  141. except ValueError as e:
  142. pass
  143. else:
  144. raise ValueError("QwerTy123 пароль есть в слове, нельзя его использовать")
  145. try:
  146. s2.password = "HelloQEWq"
  147. except ValueError as e:
  148. pass
  149. else:
  150. raise ValueError("HelloQEWq пароль НЕОЧЕНЬ, как его можно было сохранить?")
  151. try:
  152. s2.password = [4, 32]
  153. except TypeError as e:
  154. pass
  155. else:
  156. raise TypeError("Пароль должен быть строкой")
  157. try:
  158. s2.password = 123456
  159. except TypeError as e:
  160. pass
  161. else:
  162. raise TypeError("Пароль должен быть строкой")
  163. print('U r hacked Pentagon')
  164. if __name__ == '__main__':
  165. main()