diff --git a/app/main.py b/app/main.py index 7defa3411..1b5bebe89 100644 --- a/app/main.py +++ b/app/main.py @@ -1,3 +1,87 @@ class Distance: - # Write your code here - pass + def __init__(self, km: int) -> None: + self.km = km + + def __str__(self) -> str: + return f"Distance: {self.km} kilometers." + + def __repr__(self) -> str: + return f"Distance(km={self.km})" + + # якщо вказувати Distance в анатації other + # зявляється помилка + # TypeError: unsupported + # operand type(s) + # for |: 'types.UnionType' and 'str' + + def __add__(self, other: int | float) -> "Distance": + if isinstance(other, Distance): + return Distance(self.km + other.km) + elif isinstance(other, (int, float)): + return Distance(self.km + other) + raise (TypeError(f"Unsupported operand type(s): " + f"'Distance' and {type(other)}")) + + def __iadd__(self, other: int | float) -> "Distance": + if isinstance(other, Distance): + self.km += other.km + elif isinstance(other, (int, float)): + self.km += other + else: + raise TypeError(f"Unsupported operand type(s): " + f"'Distance' and {type(other)}") + return self + + def __mul__(self, other: int | float) -> "Distance": + if isinstance(other, (int, float)): + return Distance(self.km * other) + raise TypeError(f"Unsupported operand type(s): " + f"'Distance' and {type(other)}") + + def __truediv__(self, other: int | float) -> "Distance": + if isinstance(other, (int, float)): + if other == 0: + raise ZeroDivisionError("Division by zero is not allowed") + return Distance(round(self.km / other, 2)) + raise TypeError(f"Unsupported operand type(s): " + f"'Distance' and {type(other)}") + + def __lt__(self, other: int | float) -> bool: + if isinstance(other, Distance): + return self.km < other.km + elif isinstance(other, (int, float)): + return self.km < other + raise TypeError(f"Unsupported operand type(s): " + f"'Distance' and {type(other)}") + + def __gt__(self, other: int | float) -> bool: + if isinstance(other, Distance): + return self.km > other.km + elif isinstance(other, (int, float)): + return self.km > other + raise TypeError(f"Unsupported operand type(s): " + f"'Distance' and {type(other)}") + + def __eq__(self, other: int | float) -> bool: + if isinstance(other, Distance): + return self.km == other.km + elif isinstance(other, (int, float)): + return self.km == other + raise TypeError(f"Unsupported operand type(s): " + f"'Distance' and {type(other)}") + + def __le__(self, other: int | float) -> bool: + if isinstance(other, Distance): + return self.km <= other.km + elif isinstance(other, (int, float)): + return self.km <= other + raise TypeError(f"Unsupported operand type(s): " + f"'Distance' and {type(other)}") + + def __ge__(self, other: int | float) -> bool: + if isinstance(other, Distance): + return self.km >= other.km + elif isinstance(other, (int, float)): + return self.km >= other + raise (TypeError(f"Unsupported operand type(s): " + f"'Distance' and {type(other)}"))