TNSI : TD Classe Fraction⚓︎
On se donne la classe Frac
suivante (à compléter) :
class Frac:
def __init__(self, ...etc...):
# ... à compléter ...
- Compléter le constructeur
__init__()
de sorte qu'il reçoive en entrée deux arguments (en plus deself
) : le numérateurnum
(par défautnum=1
) et le dénominateurdenom
(par défautdenom=1
) - Créer une méthode magique
__repr__()
qui représente la fraction de l'instance couranteself
dans un Terminal, sous la formenum/denom
-
Créer une méthode
pgcd()
récursive qui renvoie le pgcd (plus grand commun diviseur) du numérateurnum
et du dénominateurdenom
Rappel Si \(a\) et \(b\) sont deux entiers tels que \(a\gt b\). Alors :pgcd(a,b) = pgcd(b, a-b)
pgcd(a,0) = a
-
En déduire une méthode
simp()
qui simplifie la fraction de l'instance couranteself
-
Créer une méthode
est_entier()
qui renvoie un booléen :True
, si la fraction de l'instance couranteself
tombe juste (c'est un nombre entier, par exemple \(\dfrac 62=3\))False
, sinon
-
Créer une méthode magique
__eq__()
qui teste l'égalité de deux fractions.
Cette méthode renvoie donc un booléen:True
lorsque les deux fractions sont égalesFalse
sinon : lorsque les deux fractions NE sont PAS égales
Remarque Les deux syntaxes des méthodes magiques doivent donc fonctionner pour cette méthode précise, lorsquefractionGauche
etfractionDroite
sont deux instances de la classeFraction
:- ou bien
fractionGauche.__eq__(fractionDroite)
- ou bien
fractionGauche == fractionDroite
-
Créer une méthode magique
__ge__()
qui teste si la fractionGauche est supérieure ou égale ( \(\ge\) ) à fractionDroite.
Cette méthode renvoie donc un booléen:True
lorsque fractionGauche \(\ge\) fractionDroiteFalse
sinon
Remarque Les deux syntaxes des méthodes magiques doivent donc fonctionner pour cette méthode précise, lorsquefractionGauche
etfractionDroite
sont deux instances de la classeFraction
:- ou bien
fractionGauche.__ge__(fractionDroite)
- ou bien
fractionGauche >= fractionDroite
-
Créer une méthode magique
__gt__()
qui teste si la fractionGauche est strictement supérieure ( \(\gt\) ) à la fractionDroite.
Cette méthode renvoie donc un booléen:True
lorsque fractionGauche \(\gt\) fractionDroiteFalse
sinon
Remarque Les deux syntaxes des méthodes magiques doivent donc fonctionner pour cette méthode précise, lorsquefractionGauche
etfractionDroite
sont deux instances de la classeFraction
:- ou bien
fractionGauche.__gt__(fractionDroite)
- ou bien
fractionGauche > fractionDroite
-
Créer une méthode magique
__le__()
qui teste si la fractionGauche est inférieure ou égale ( \(\le\) ) à la fractionDroite.
Cette méthode renvoie donc un booléen:True
lorsque fractionGauche \(\leq\) fractionDroiteFalse
sinon
Remarque Les deux syntaxes des méthodes magiques doivent donc fonctionner pour cette méthode précise, lorsquefractionGauche
etfractionDroite
sont deux instances de la classeFraction
:- ou bien
fractionGauche.__le__(fractionDroite)
- ou bien
fractionGauche <= fractionDroite
-
Créer une méthode magique
__lt__()
qui teste si la fractionGauche est strictement inférieure ( \(\le\) ) à la fractionDroite.
Cette méthode renvoie donc un booléen:True
lorsque fractionGauche \(\lt\) fractionDroiteFalse
sinon
Remarque Les deux syntaxes des méthodes magiques doivent donc fonctionner pour cette méthode précise, lorsquefractionGauche
etfractionDroite
sont deux instances de la classeFraction
:- ou bien
fractionGauche.__lt__(fractionDroite)
- ou bien
fractionGauche < fractionDroite
-
Créer une méthode magique
__add__()
qui ajoute deux fractions. Cette méthode magique renvoie donc un object, préalablement simplifié, de classe Fraction - Créer une méthode magique
__sub__()
qui soustrait deux fractions. Cette méthode magique renvoie donc un object, préalablement simplifié, de classe Fraction. - Créer une méthode magique
__mul__()
qui multiplie deux fractions. Cette méthode magique renvoie donc un object, préalablement simplifié, de classe Fraction. - Créer une méthode magique
__truediv__()
qui divise deux fractions. Cette méthode magique renvoie donc un object, préalablement simplifié, de classe Fraction.