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 class File: def __init__(self, name) -> None: self.name = name self.in_trash = False self.is_deleted = False def restore_from_trash(self): print(f"Файл {self.name} восстановлен из корзины") self.in_trash = False def remove(self): print(f"Файл {self.name} был удален") self.is_deleted = True def read(self): if self.is_deleted == True: print(f"ErrorReadFileDeleted({self.name})") return if self.in_trash == True: print(f"ErrorReadFileTrashed({self.name})") return print(f"Прочитали все содержимое файла {self.name}") def write(self, content): if self.is_deleted: print(f"ErrorWriteFileDeleted({self.name})") return if self.in_trash: print(f"ErrorWriteFileTrashed({self.name})") return print(f"Записали значение {content} в файл {self.name}") class Trash: content = [] def __init__(self): pass @staticmethod def add(file: File): if not isinstance(file, File): print("В корзину можно добавлять только файл") else: file.in_trash = True Trash.content.append(file) @staticmethod def clear(): print("Очищаем корзину") while Trash.content: Trash.content[0].remove() Trash.content.pop(0) print("Корзина пуста") @staticmethod def restore(): print("Восстанавливаем файлы из корзины") while Trash.content: Trash.content[0].restore_from_trash() Trash.content.pop(0) print("Корзина пуста") def main(): f1 = File('puppies.jpg') f2 = File('cat.jpg') f3 = File('xxx.doc') passwords = File('pass.txt') for file in [f1, f2, f3, passwords]: assert file.is_deleted is False assert file.in_trash is False f3.read() f3.remove() assert f3.is_deleted is True f3.read() f3.write('hello') assert Trash.content == [] Trash.add(f2) Trash.add(passwords) Trash.add(f3) f1.read() Trash.add(f1) f1.read() for file in [f1, f2, f3, passwords]: assert file.in_trash is True for f in [f2, passwords, f3, f1]: assert f in Trash.content Trash.restore() assert Trash.content == [], 'После восстановления корзина должна была очиститься' Trash.add(passwords) Trash.add(f2) Trash.add('hello') Trash.add(f1) for f in [passwords, f2, f1]: assert f in Trash.content Trash.clear() for file in [passwords, f2, f1]: assert file.is_deleted is True assert Trash.content == [], 'После удаления файлов корзина должна была очиститься' f1.read() ''' f1 = File('puppies.jpg') assert f1.name == 'puppies.jpg' assert f1.in_trash is False assert f1.is_deleted is False f1.read() # Прочитали все содержимое файла puppies.jpg f1.remove() # Файл puppies.jpg был удален assert f1.is_deleted is True f1.read() # ErrorReadFileDeleted(puppies.jpg) passwords = File('pass.txt') assert passwords.name == 'pass.txt' assert passwords.in_trash is False assert passwords.is_deleted is False f3 = File('xxx.doc') assert f3.__dict__ == {'name': 'xxx.doc', 'in_trash': False, 'is_deleted': False} f3.read() f3.remove() assert f3.is_deleted is True f3.read() f3.in_trash = True f3.is_deleted = False f3.read() f3.write('hello') f3.restore_from_trash() assert f3.in_trash is False f3.write('hello') # Записали значение «hello» в файл cat.jpg f2 = File('cat.jpg') f2.write('hello') # Записали значение «hello» в файл cat.jpg f2.write([1, 2, 3]) # Записали значение «hello» в файл cat.jpg f2.remove() # Файл cat.jpg был удален f2.write('world') # ErrorWriteFileDeleted(cat.jpg) ''' ''' 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()