Bonjour,
Je suis en train d’essayer de développer une classe permettant de manipuler des fractions en Python (je sais qu’il existe déjà une bibliothèque à cette effet, mais elle ne me convient pas car elle ne donne pas la fraction irréductible).
J’ai établi le code suivant (qui fonctionne très bien avec les nombres décimaux) :
class Fraction:
def __init__(self,value):
self.numerator = value
self.denominator = 1
while not self.numerator == int(self.numerator):
self.numerator *= 10
self.denominator *= 10
self.numerator = int(self.numerator)
gcd = np.gcd(self.numerator,self.denominator)
self.numerator//= gcd
self.denominator //= gcd
def __repr__(self):
return f"{self.numerator}/{self.denominator}"
def __add__(self,fraction):
lcm = np.lcm(self.denominator,fraction.denominator)
denominator = lcm
num_1 = self.numerator * (lcm//self.denominator)
num_2 = fraction.numerator * (lcm//fraction.denominator)
return Fraction((num_1 + num_2)/denominator)
def __sub__(self,fraction):
fraction.numerator *= -1
return self.__add__(fraction)
def __mul__(self,fraction):
n = self.numerator * fraction.numerator
print(self.numerator,fraction.numerator,n)
d = self.denominator * fraction.denominator
print(self.numerator,fraction.numerator,n)
return Fraction(n/d)
def __truediv__(self,fraction):
fraction.numerator, fraction.denominator = fraction.denominator, fraction.numerator
print(fraction)
return self.__mul__(fraction)
Seulement voilà, tout commence à capoter dès qu’on lui donne des rationnels non décimaux(comme 1/3, par exemple).
J’ai bien vu que le problème vient de la méthode que j’utilise dans init pour convertir la valeur décimale en une fraction irréductible, mais je ne vois pas comment m’y prendre pour qu’elle prenne en charge aussi les rationnels non décimaux…
Pourriez-vous m’aider ?
+0
-0