From cb03676aeac4bd567d2b8920fdddd29ca49f8fad Mon Sep 17 00:00:00 2001 From: Dell Date: Tue, 10 Dec 2024 09:44:42 +0300 Subject: [PATCH 1/2] Solution --- app/main.py | 67 ++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 61 insertions(+), 6 deletions(-) diff --git a/app/main.py b/app/main.py index 6d375672..fe2959a5 100644 --- a/app/main.py +++ b/app/main.py @@ -2,24 +2,79 @@ class IntegerRange: - pass + def __init__(self, min_amount: int, max_amount: int) -> None: + self.min_amount = min_amount + self.max_amount = max_amount + + def __set_name__(self, owner: type, name: str) -> None: + self.protected_name = "_" + name + + def __get__(self, instance: type, owner: type) -> int: + if instance is None: + return self + return getattr(instance, self.protected_name) + + def __set__(self, instance: type, value: int) -> int: + if not isinstance(value, int): + raise TypeError + if not (self.min_amount <= value <= self.max_amount): + raise ValueError + setattr(instance, self.protected_name, value) class Visitor: - pass + age = IntegerRange(0, 120) + weight = IntegerRange(0, 300) + height = IntegerRange(50, 250) + + def __init__(self, name: str, age: int, weight: int, height: int) -> None: + self.name = name + self.age = age + self.weight = weight + self.height = height class SlideLimitationValidator(ABC): - pass + def __init__(self, age: int, height: int, weight: int) -> None: + self.age = age + self.weight = weight + self.height = height class ChildrenSlideLimitationValidator(SlideLimitationValidator): - pass + age = IntegerRange(4, 14) + height = IntegerRange(80, 120) + weight = IntegerRange(20, 50) + + def __init__(self, age: int, height: int, weight: int) -> None: + self.age = age + self.height = height + self.weight = weight class AdultSlideLimitationValidator(SlideLimitationValidator): - pass + age = IntegerRange(14, 60) + height = IntegerRange(120, 220) + weight = IntegerRange(50, 120) + + def __init__(self, age: int, height: int, weight: int) -> None: + self.age = age + self.height = height + self.weight = weight class Slide: - pass + def __init__(self, name: str, limitation_class: type) -> None: + self.name = name + self.limitation_class = limitation_class + + def can_access(self, visitor: Visitor) -> bool: + try: + self.limitation_class( + age=visitor.age, + height=visitor.height, + weight=visitor.weight, + ) + return True + except (ValueError, TypeError): + return False From 5a158f65dfc3c27ca24f5daf7c530304f0f36ac7 Mon Sep 17 00:00:00 2001 From: Dell Date: Tue, 10 Dec 2024 14:05:38 +0300 Subject: [PATCH 2/2] Fix len code --- app/main.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/app/main.py b/app/main.py index fe2959a5..f1753164 100644 --- a/app/main.py +++ b/app/main.py @@ -47,9 +47,7 @@ class ChildrenSlideLimitationValidator(SlideLimitationValidator): weight = IntegerRange(20, 50) def __init__(self, age: int, height: int, weight: int) -> None: - self.age = age - self.height = height - self.weight = weight + super().__init__(age, height, weight) class AdultSlideLimitationValidator(SlideLimitationValidator): @@ -58,9 +56,7 @@ class AdultSlideLimitationValidator(SlideLimitationValidator): weight = IntegerRange(50, 120) def __init__(self, age: int, height: int, weight: int) -> None: - self.age = age - self.height = height - self.weight = weight + super().__init__(age, height, weight) class Slide: