diff --git a/app/main.py b/app/main.py index 7defa3411..0e0d35d56 100644 --- a/app/main.py +++ b/app/main.py @@ -1,3 +1,74 @@ +from typing import Union + + class Distance: - # Write your code here - pass + + def __init__(self, km: float) -> None: + self.km = km + + def __str__(self) -> str: + return f"Distance: {self.km} kilometers." + + def __repr__(self) -> str: + return f"Distance(km={self.km})" + + def __add__(self, other: Union[float, int, "Distance"]) -> "Distance": + if isinstance(other, (Distance)): + return Distance(self.km + other.km) + elif isinstance(other, (int, float)): + return Distance(self.km + other) + return NotImplemented + + def __iadd__(self, other: Union[float, int, "Distance"]) -> "Distance": + if isinstance(other, (Distance)): + self.km += other.km + elif isinstance(other, (int, float)): + self.km += other + else: + return NotImplemented + return self + + def __mul__(self, other: Union[float, int]) -> "Distance": + if isinstance(other, (int, float)): + return Distance(self.km * other) + return NotImplemented + + def __truediv__(self, other: Union[float, int]) -> "Distance": + if isinstance(other, (int, float)): + return Distance(round(self.km / other, 2)) + return NotImplemented + + def __lt__(self, other: Union[float, int, "Distance"]) -> bool: + if isinstance(other, (Distance)): + return self.km < other.km + elif isinstance(other, (int, float)): + return self.km < other + return NotImplemented + + def __gt__(self, other: Union[float, int, "Distance"]) -> bool: + if isinstance(other, (Distance)): + return self.km > other.km + elif isinstance(other, (int, float)): + return self.km > other + return NotImplemented + + def __eq__(self, other: Union[float, int, "Distance"]) -> bool: + if isinstance(other, (Distance)): + return self.km == other.km + elif isinstance(other, (int, float)): + return self.km == other + return NotImplemented + + def __le__(self, other: Union[float, int, "Distance"]) -> bool: + if isinstance(other, (Distance)): + return self.km <= other.km + elif isinstance(other, (int, float)): + return self.km <= other + return NotImplemented + + def __ge__(self, other: Union[float, int, "Distance"]) -> bool: + if isinstance(other, (Distance)): + return self.km >= other.km + elif isinstance(other, (int, float)): + return self.km >= other + return NotImplemented diff --git a/requirements.txt b/requirements.txt index 3f202d6e7..ad305b9a1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,6 @@ -flake8==5.0.4 -flake8-annotations==2.9.1 -flake8-quotes==3.3.1 -flake8-variables-names==0.0.5 +flake8==7.1.1 +flake8-annotations==3.1.1 +flake8-quotes==3.4.0 +flake8-variables-names==0.0.6 pep8-naming==0.13.2 pytest==7.1.3