#python #class #fractions
Вопрос:
В коде, который я написал, мне удалось сложить дроби вместе, но я также хотел бы иметь возможность добавлять целые числа к дроби.
def gcd(denominator, numerator):
if numerator == 0:
return denominator
else:
return gcd(numerator, (denominator % numerator))
class Fraction:
def __init__(self,numerator = 0, denominator = 1):
self.numerator = int(numerator / gcd(abs(denominator),abs(numerator) ))
self.denominator = int(denominator / gcd(abs(denominator),abs(numerator) ))
if self.denominator < 0:
self.denominator = abs(self.denominator)
self.numerator = -1*self.numerator
elif self.denominator == 0:
raise ZeroDivisionError
def __str__(self):
if self.denominator == 1:
return str(self.numerator)
else:
return str(self.numerator) "/" str(self.denominator)
def __add__(self,other):
if type(other) == int:
other = Fraction(other,1)
return self.add(other)
else:
return self.add(other)
def add(self,other):
result = Fraction()
result.numerator = other.denominator * self.numerator self.denominator * other.numerator
result.denominator = other.denominator * self.denominator
multiple = gcd(result.denominator,result.numerator)
result.numerator = int(result.numerator / multiple)
result.denominator = int(result.denominator / multiple)
return result
p = Fraction(2,3)
q = Fraction(3,5)
r = (p 1)
print(r)
На данный момент это работает для (дробь целое число), но не для (целое число дробь). Я уже искал некоторые вещи, такие как использование __radd__
, но когда я использую это, (целое число дробь) работает, но (дробь целое число) больше не работает….
Как я могу это исправить? Заранее спасибо!!
Комментарии:
1. Покажите свой
__radd__
код, правильно отформатированный в вопросе, и объясните, что «больше не работает» (отобразите сообщение об ошибке, если оно появится).2. Ваш код работал в обоих случаях, т. е.
print(p 1)
иprint(1 p)
когда я добавил__radd__
метод, т. е.def __radd__(self, other): return self.__add__(other)
3. @DarrylG Большое тебе спасибо, я думаю, что теперь это работает! Когда я использовал
__radd__
себя , я полностью__add__
заменил__radd__
, но, по-видимому, это невозможно.4. @yungCalculator—рад помочь. Думаю, вы понимаете, что вам нужны как add , так и radd . Вы должны добавить свой исправленный код в качестве ответа, чтобы другим было легче найти его в будущем (т. Е. Чтобы им не приходилось читать комментарии).