Vous êtes sur la page 1sur 3

Une classe fraction (exercice1)

March 14, 2023

[74]: from math import gcd

[129]: class fraction :


"""Cette classe représente et manipule un nombre rationnel"""
def __init__(self, a = 0, b = 1):
if type(a) != int or type(b) != int :
raise TypeError('le numérateur et le dénominateur doivent être de␣
↪type entier')

if b == 0 :
raise ValueError("Le denomunateur ne pas être nul")
if b > 0 :
self.num = a
self.denom = b
else :
self.num = -a
self.denom = -b
self.__reduce()

def __reduce(self):
""" Normaliser une fraction (écrire la fraction dans sa forme␣
↪irréductible ) """

self.num, self.denom = self.num // gcd(self.num, self.denom), self.


↪denom // gcd(self.num, self.denom)

def __str__(self) :
return str(self.num) if self.denom == 1 else '{}/{}'.format(str(self.
↪num), str(self.denom))

def __repr__(self):
return "fraction({},{})".format(str(self.num), str(self.denom))

def __add__(self, autre):


newfrac = fraction()
newfrac.num = self.num * autre.denom + autre.num * self.denom
newfrac.denom = self.denom * autre.denom
return newfrac

1
def __sub__(self, autre):
return fraction(self.num * autre.denom - autre.num * self.denom, self.
↪denom * autre.denom)

def __mul__(self, autre):


num = self.num * autre.num
denom = self.denom * autre.denom
return fraction(num, denom)

def __truediv__(self, autre):


num = self.num * autre.denom
denom = self.denom * autre.num
return fraction(num, denom)

def __lt__(self,autre):
return (self.num * autre.denom) < (self.denom * autre.num)

def __eq__(self,autre):
return(self.num * autre.denom) == (self.denom * autre.num)

[135]: f1 = fraction(1, 3)
f2 = fraction(2, 5)
f3 = fraction(4, 8)
print(f1, f2, f3)
f4, f5, f6, f7 = f1 + f2, f1 - f2, f1 * f2, f1 / f2
print(f3, f4, f6, f7)

1/3 2/5 1/2


1/2 11/15 2/15 5/6

[140]: print(f1 == f1, f1 == f2)


print(f1 != f1, f1 != f2)
print(f1 < f2, f2 < f1)
print(f1 > f2, f2 > f1)
print(f1 > f1, f1 < f1)

True False
False True
True False
False True
False False

[137]: f1 = fraction()
f2 = fraction(4, 12)
print(f1)
print(f2)
f2

2
0
1/3

[137]: fraction(1,3)

[67]: f3 = fraction(3, 4)

[69]: print(f3)

3 / 4

[70]: f2 = fraction(3.2, 2)

---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Input In [70], in <cell line: 1>()
----> 1 f2 = fraction(3.2,2)

Input In [63], in fraction.__init__(self, a, b)


4 def __init__(self, a = 0, b = 1):
5 if type(a) != int or type(b) != int :
----> 6 raise TypeError('le numérateur et le dénominateur doivent être␣
↪de type entier')

7 if b == 0 :
8 raise ValueError("Le denomunateur ne pas être nul")

TypeError: le numérateur et le dénominateur doivent être de type entier

Vous aimerez peut-être aussi