Как добавить целое число к дроби с помощью классов в Python?

#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 . Вы должны добавить свой исправленный код в качестве ответа, чтобы другим было легче найти его в будущем (т. Е. Чтобы им не приходилось читать комментарии).