Semaine 4, jour 4, soir
This commit is contained in:
57
Semaine_04/Fonctions/fractions_3.py
Normal file
57
Semaine_04/Fonctions/fractions_3.py
Normal file
@@ -0,0 +1,57 @@
|
||||
# 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)
|
||||
26
Semaine_04/Fonctions/persons.py
Normal file
26
Semaine_04/Fonctions/persons.py
Normal file
@@ -0,0 +1,26 @@
|
||||
# Heritage / Composition
|
||||
# Heritage: relation "EST UN"
|
||||
|
||||
class Person:
|
||||
def __init__(self, nom, prenom, age):
|
||||
self.nom = nom
|
||||
self.prenom = prenom
|
||||
self.age = age
|
||||
|
||||
def dire_bonjour(self):
|
||||
return "Bonjour tout le monde"
|
||||
|
||||
class Student(Person): # Heritage
|
||||
def __init__(self, nom, prenom, age, domaine):
|
||||
super().__init__(nom, prenom, age)
|
||||
self.domaine = domaine
|
||||
|
||||
# override
|
||||
def dire_bonjour(self):
|
||||
return super().dire_bonjour() + "! Ca va?"
|
||||
|
||||
alice = Student('Smith', 'Alice', 19, 'Finance')
|
||||
print(alice.dire_bonjour())
|
||||
print(alice.__dict__)
|
||||
print(isinstance(alice, Student))
|
||||
print(isinstance(alice, Person))
|
||||
49
Semaine_04/Fonctions/shapes.py
Normal file
49
Semaine_04/Fonctions/shapes.py
Normal file
@@ -0,0 +1,49 @@
|
||||
# Composition: traduit une relation "A UN" "POSSED UN" "DEPEND DE"
|
||||
from math import pi
|
||||
|
||||
class Point:
|
||||
def __init__(self, x: float, y: float):
|
||||
self.x = x
|
||||
self.y = y
|
||||
|
||||
class Forme: # Abstraction
|
||||
def __init__(self, centre: Point):
|
||||
self.centre = centre
|
||||
|
||||
def aire(self):
|
||||
raise NotImplementedError("Attention aire doit etre redefini")
|
||||
|
||||
def perimetre(self):
|
||||
raise NotImplementedError("Attention perimetre doit etre redefini")
|
||||
|
||||
class Cercle(Forme):
|
||||
def __init__(self, centre: Point, rayon: float):
|
||||
super().__init__(centre)
|
||||
self.rayon = rayon
|
||||
|
||||
def aire(self):
|
||||
return pi * self.rayon ** 2
|
||||
|
||||
def perimetre(self):
|
||||
return 2 * pi * self.rayon
|
||||
|
||||
class Rectangle(Forme):
|
||||
def __init__(self, centre: Point, longeur: float, largeur: float):
|
||||
super().__init__(centre)
|
||||
self.longueur = longeur
|
||||
self.largeur = largeur
|
||||
|
||||
def aire(self):
|
||||
return self.longueur * self.largeur
|
||||
|
||||
def perimetre(self):
|
||||
return 2 * (self.longueur + self.largeur)
|
||||
|
||||
cercle1 = Cercle(centre= Point(2, 2), rayon= 5)
|
||||
cercle2 = Cercle(centre= Point(-2, 2), rayon= 6)
|
||||
rect1 = Rectangle(centre= Point(0, 0), longeur= 12, largeur= 5)
|
||||
rect2 = Rectangle(centre= Point(1, 1), longeur= 10, largeur= 6)
|
||||
|
||||
formes = [cercle1, cercle2, rect1, rect2]
|
||||
for forme in formes:
|
||||
print(forme.aire())
|
||||
Reference in New Issue
Block a user