Ответсообщение недоступно
Не знаю в чем именно проблема у вас с 15ым тестом.
но благодаря вашему комментарию тоже обвешал декораторами свой класс стало гораздо короче, спасибо. Тесты прошло.
from functools import total_ordering
def arguments_to_fraction(func):
def wrapper(*args):
norm_args = []
for arg in args:
if type(arg) is not Fraction:
norm_args.append(Fraction(arg))
else:
norm_args.append(arg)
return func(*norm_args)
return wrapper
@total_ordering
class Fraction:
def __init__(self, a, b=None):
if b is None:
b = 1
if isinstance(a, str) and ('/' in a):
a, b = map(int, [_ for _ in a.split('/')])
else:
a = int(a)
self.__a, self.__b = a, b
self.__gcd()
def __gcd(self):
nod_a, nod_b = self.__a, self.__b
while nod_b != 0:
nod_a, nod_b = nod_b, nod_a % nod_b
self.__a //= nod_a
self.__b //= nod_a
def numerator(self, number=None):
if number is None:
return abs(self.__a)
self.__a = number * (self.__a // abs(self.__a))
self.__gcd()
def denominator(self, number=None):
if number is None:
return abs(self.__b)
self.__b = number * (self.__b // abs(self.__b))
self.__gcd()
def reverse(self):
self.__a, self.__b = self.__b, self.__a
return self
def __str__(self):
if self.__b > 0:
return f"{self.__a}/{self.__b}"
else:
return f"{-self.__a}/{-self.__b}"
def __repr__(self):
if self.__b > 0:
return f"Fraction(\'{self.__a}/{self.__b}\')"
else:
return f"Fraction(\'{-self.__a}/{-self.__b}\')"
@arguments_to_fraction
def __neg__(self):
return Fraction(-self.__a, self.__b)
@arguments_to_fraction
def __add__(self, other):
return Fraction(self.__a * other.__b + other.__a * self.__b, self.__b * other.__b)
def __sub__(self, other):
return self.__add__(other.__neg__())
def __iadd__(self, other):
self.__a, self.__b = self.__a * other.__b + other.__a * self.__b, self.__b * other.__b
self.__gcd()
return self
def __isub__(self, other):
self.__a, self.__b = self.__a * other.__b - other.__a * self.__b, self.__b * other.__b
self.__gcd()
return self
def __mul__(self, other):
return Fraction(self.__a * other.__a, self.__b * other.__b)
def __truediv__(self, other):
return Fraction(self.__a * other.__b, self.__b * other.__a)
def __imul__(self, other):
self.__a, self.__b = self.__a * other.__a, self.__b * other.__b
self.__gcd()
return self
def __itruediv__(self, other):
self.__a, self.__b = self.__a * other.__b, self.__b * other.__a
self.__gcd()
return self
@arguments_to_fraction
def __lt__(self, other):
left = self.__a * self.__b // abs(self.__b) * abs(other.__b)
right = other.__a * other.__b // abs(other.__b) * abs(self.__b)
return left < right
@arguments_to_fraction
def __eq__(self, other):
return str(self) == str(other)