57 lines
1.8 KiB
Python
57 lines
1.8 KiB
Python
# Reussir dans la POO c'est se rapprocher au plus pret de la realite
|
|
from typing import Self
|
|
|
|
|
|
class Fraction:
|
|
def __init__(self, numerateur, denominateur):
|
|
# Attributs
|
|
self.numerateur = numerateur # tiers.numerateur = 1
|
|
self.denominateur = denominateur
|
|
self.simplifier()
|
|
|
|
def quotient(self):
|
|
return self.numerateur / self.denominateur
|
|
|
|
@classmethod # decorateur
|
|
def from_str(cls, num: str, den: str):
|
|
return cls(numerateur= int(num), denominateur= int(den))
|
|
|
|
@staticmethod # Pas de 'self' => Helpers
|
|
def pgcd(a, b):
|
|
if b == 0: return a
|
|
return Fraction.pgcd(a= b, b= a % b)
|
|
|
|
def simplifier(self):
|
|
a = self.numerateur
|
|
b = self.denominateur
|
|
pgcd = Fraction.pgcd(a, b)
|
|
|
|
self.numerateur = self.numerateur // pgcd
|
|
self.denominateur //= pgcd
|
|
|
|
def __add__(self, fraction):
|
|
num = (self.numerateur * fraction.denominateur) + (self.denominateur * fraction.numerateur)
|
|
den = self.denominateur * fraction.denominateur
|
|
return Fraction(numerateur= num, denominateur= den)
|
|
|
|
def __mul__(self, facteur: int | Self):
|
|
if isinstance(facteur, int):
|
|
return Fraction(
|
|
numerateur= self.numerateur * facteur,
|
|
denominateur= self.denominateur
|
|
)
|
|
return Fraction(
|
|
numerateur= self.numerateur * facteur.numerateur,
|
|
denominateur= self.denominateur * facteur.denominateur
|
|
)
|
|
|
|
def __rmul__(self, nombre: int):
|
|
return self.__mul__(nombre)
|
|
|
|
def __repr__(self):
|
|
return f"Fraction({self.numerateur}/{self.denominateur})"
|
|
|
|
# le PGCD de 146 et 248
|
|
fraction = Fraction.from_str('2', '5')
|
|
print(fraction * 2)
|
|
print(2 * fraction) |