TelenkovDmitry 8 months ago
parent
commit
cf4355b785
2 changed files with 234 additions and 0 deletions
  1. 32 0
      courses/python_oop/easy_passwords.txt
  2. 202 0
      courses/python_oop/method_task.py

+ 32 - 0
courses/python_oop/easy_passwords.txt

@@ -0,0 +1,32 @@
+123456
+password
+123456789
+12345
+12345678
+qwerty
+1234567
+111111
+1234567890
+123123
+abc123
+1234
+password1
+iloveyou
+1q2w3e4r
+000000
+qwerty123
+zaq12wsx
+dragon
+sunshine
+princess
+letmein
+654321
+QwerTy123
+KissasSAd1f
+monkey
+27653
+1qaz2wsx
+123321
+qwertyuiop
+superman
+asdfghjkl

+ 202 - 0
courses/python_oop/method_task.py

@@ -0,0 +1,202 @@
+from string import digits, ascii_letters
+
+
+class Registration:
+
+    def __init__(self, login, password) -> None:
+        self.login = login
+        self.password = password
+
+    @property
+    def login(self):
+        return self.__login
+    
+    @login.setter
+    def login(self, value: str):
+        if not isinstance(value, str):
+            raise TypeError
+        if '@' not in value:
+            raise ValueError
+        if value.rfind('.') < value.rfind('@'):
+            raise ValueError
+        self.__login = value
+
+    @staticmethod
+    def is_include_digit(value: str):
+        for i in value:
+            if i in digits:
+                return True
+        return False
+    
+    @staticmethod
+    def is_include_all_register(value: str):
+        upper = False
+        lower = False
+        for i in value:
+            if not lower:
+                lower = i.islower()
+            if not upper:
+                upper = i.isupper()
+        return lower and upper
+
+    @staticmethod
+    def is_include_only_latin(value: str):
+        for i in value:
+            if not i.isdigit():
+                if  i not in ascii_letters:
+                    return False
+        return True        
+
+    @staticmethod
+    def check_password_dictionary(value: str):
+        with open('easy_passwords.txt', 'r', encoding='utf-8') as f:
+            password_list = f.read().split('\n')
+        return value in password_list
+    
+    @property
+    def password(self):
+        return self.__password
+    
+    @password.setter
+    def password(self, value: str):
+        if not isinstance(value, str):
+            raise TypeError("Пароль должен быть строкой")
+        if len(value) < 5 or len(value) > 11:
+            raise ValueError("Пароль должен быть длиннее 4 и меньше 12 символов")
+        if not self.is_include_digit(value):
+            raise ValueError("Пароль должен содержать хотя бы одну цифру")
+        if not self.is_include_all_register(value):
+            raise ValueError("Пароль должен содержать хотя бы один символ верхнего и нижнего регистра")
+        if not self.is_include_only_latin(value):
+            raise ValueError("Пароль должен содержать только латинский алфавит")
+        if self.check_password_dictionary(value):
+            raise ValueError("Ваш пароль содержится в списке самых легких")
+        self.__password = value
+
+
+
+def check_password_dictionary(value: str):
+    with open('easy_passwords.txt', 'r', encoding='utf-8') as f:
+        password_list = f.read().split('\n')
+        print(password_list)
+        # password_list = open('easy_passwords.txt', 'r', encoding='utf-8').read().split('\n')
+    return value in password_list
+
+def main():
+    # reg = Registration('asdfa@sfsdf.werwe', 'QwerTy123')
+    # reg = Registration('asdfa@sfsdf.werwe', 'QwerTy123')
+    # print(reg.login)
+    # print(reg.password)
+
+    # print(check_password_dictionary('124244242'))
+    # print(check_password_dictionary('as1SNdf'))
+
+
+    try:
+        s2 = Registration("fga", "asd12")
+    except ValueError as e:
+        pass
+    else:
+        raise ValueError("Registration('fga', 'asd12') как можно записать такой логин?")
+
+    try:
+        s2 = Registration("fg@a", "asd12")
+    except ValueError as e:
+        pass
+    else:
+        raise ValueError("Registration('fg@a', 'asd12') как можно записать такой логин?")
+
+    s2 = Registration("translate@gmail.com", "as1SNdf")
+    try:
+        s2.login = "asdsa12asd."
+    except ValueError as e:
+        pass
+    else:
+        raise ValueError("asdsa12asd как можно записать такой логин?")
+
+    try:
+        s2.login = "asdsa12@asd"
+    except ValueError as e:
+        pass
+    else:
+        raise ValueError("asdsa12@asd как можно записать такой логин?")
+
+    assert Registration.check_password_dictionary('QwerTy123'), 'проверка на пароль в слове не работает'
+
+    try:
+        s2.password = "QwerTy123"
+    except ValueError as e:
+        pass
+    else:
+        raise ValueError("QwerTy123 хранится в словаре паролей, как его можно было сохранить?")
+
+
+    try:
+        s2.password = "KissasSAd1f"
+    except ValueError as e:
+        pass
+    else:
+        raise ValueError("KissasSAd1f хранится в словаре паролей, как его можно было сохранить?")
+
+    try:
+        s2.password = "124244242"
+    except ValueError as e:
+        pass
+    else:
+        raise ValueError("124244242 пароль НЕОЧЕНЬ, как его можно было сохранить?")
+
+    try:
+        s2.password = "RYIWUhjkdbfjfgdsffds"
+    except ValueError as e:
+        pass
+    else:
+        raise ValueError("RYIWUhjkdbfjfgdsffds пароль НЕОЧЕНЬ, как его можно было сохранить?")
+
+    try:
+        s2.password = "CaT"
+    except ValueError as e:
+        pass
+    else:
+        raise ValueError("CaT пароль НЕОЧЕНЬ, как его можно было сохранить?")
+
+    try:
+        s2.password = "monkey"
+    except ValueError as e:
+        pass
+    else:
+        raise ValueError("monkey пароль НЕОЧЕНЬ, как его можно было сохранить?")
+
+    try:
+        s2.password = "QwerTy123"
+    except ValueError as e:
+        pass
+    else:
+        raise ValueError("QwerTy123 пароль есть в слове, нельзя его использовать")
+
+    try:
+        s2.password = "HelloQEWq"
+    except ValueError as e:
+        pass
+    else:
+        raise ValueError("HelloQEWq пароль НЕОЧЕНЬ, как его можно было сохранить?")
+
+    try:
+        s2.password = [4, 32]
+    except TypeError as e:
+        pass
+    else:
+        raise TypeError("Пароль должен быть строкой")
+
+    try:
+        s2.password = 123456
+    except TypeError as e:
+        pass
+    else:
+        raise TypeError("Пароль должен быть строкой")
+
+    print('U r hacked Pentagon')
+
+
+
+if __name__ == '__main__':
+    main()