| f | import math | f | import math |
| | | |
| class Triangle: | | class Triangle: |
| | | |
| def __init__(self, a, b, c): | | def __init__(self, a, b, c): |
| self.a = float(a) | | self.a = float(a) |
| self.b = float(b) | | self.b = float(b) |
| self.c = float(c) | | self.c = float(c) |
| sides = [self.a, self.b, self.c] | | sides = [self.a, self.b, self.c] |
| sides.sort() | | sides.sort() |
| self._is_empty = not (all((side > 0 for side in sides)) and side | | self._is_empty = not (all((side > 0 for side in sides)) and side |
| s[0] + sides[1] > sides[2]) | | s[0] + sides[1] > sides[2]) |
| | | |
| def __bool__(self): | | def __bool__(self): |
| return not self._is_empty | | return not self._is_empty |
| | | |
| def __abs__(self): | | def __abs__(self): |
| if self._is_empty: | | if self._is_empty: |
| return 0.0 | | return 0.0 |
| p = (self.a + self.b + self.c) / 2 | | p = (self.a + self.b + self.c) / 2 |
| return math.sqrt(p * (p - self.a) * (p - self.b) * (p - self.c)) | | return math.sqrt(p * (p - self.a) * (p - self.b) * (p - self.c)) |
| | | |
| def __eq__(self, other): | | def __eq__(self, other): |
| if not isinstance(other, Triangle): | | if not isinstance(other, Triangle): |
| return NotImplemented | | return NotImplemented |
| self_sides = sorted([self.a, self.b, self.c]) | | self_sides = sorted([self.a, self.b, self.c]) |
| other_sides = sorted([other.a, other.b, other.c]) | | other_sides = sorted([other.a, other.b, other.c]) |
| return math.isclose(self_sides[0], other_sides[0]) and math.iscl | | return math.isclose(self_sides[0], other_sides[0]) and math.iscl |
| ose(self_sides[1], other_sides[1]) and math.isclose(self_sides[2], other | | ose(self_sides[1], other_sides[1]) and math.isclose(self_sides[2], other |
| _sides[2]) | | _sides[2]) |
| | | |
| def __lt__(self, other): | | def __lt__(self, other): |
| if not isinstance(other, Triangle): | | if not isinstance(other, Triangle): |
| return NotImplemented | | return NotImplemented |
| return abs(self) < abs(other) | | return abs(self) < abs(other) |
| | | |
| def __le__(self, other): | | def __le__(self, other): |
| if not isinstance(other, Triangle): | | if not isinstance(other, Triangle): |
| return NotImplemented | | return NotImplemented |
| return abs(self) <= abs(other) | | return abs(self) <= abs(other) |
| | | |
| def __gt__(self, other): | | def __gt__(self, other): |
| if not isinstance(other, Triangle): | | if not isinstance(other, Triangle): |
| return NotImplemented | | return NotImplemented |
| return abs(self) > abs(other) | | return abs(self) > abs(other) |
| | | |
| def __ge__(self, other): | | def __ge__(self, other): |
| if not isinstance(other, Triangle): | | if not isinstance(other, Triangle): |
| return NotImplemented | | return NotImplemented |
| return abs(self) >= abs(other) | | return abs(self) >= abs(other) |
| | | |
| def __str__(self): | | def __str__(self): |
| t | return f'{self.a}:{self.b}:{self.c}' | t | return f'{self.a:.1f}:{self.b:.1f}:{self.c:.1f}' |