Programmation objet en Python
💻 Travail n° 1 Classe Cercle
🎯 Travail à faire :
-
À partir de l’exemple donné dans Une 1ère classe, créer une classe
Cercle:-
qui possède 1 attribut d’instance nommé
rayon -
2 méthodes
calcCirconference()etcalcSurface()qui retourne respectivement la circonférence et la surface d’un objet de typeCercle
-
-
Instancier 2 objets
c1etc2de typeCercleavec 2 rayons différents et calculer puis afficher leur circonférence et leur surface.
c1 <Cercle(1)> -> Circonférence : 6.28 / Aire : 3.14
c2 <Cercle(10)> -> Circonférence : 62.83 / Aire : 314.16
💻 Travail n° 2 Surcharge opérateur
🎯 Travail à faire :
Compléter le code de la classe Resistance donné dans le script Python ci-dessous pour qu’elle redéfinisse le comportement de l’opérateur // (→ division entière) pour que celui-ci permettent de calculer la valeur résultante de résistance montées en parallèle.
La méthode “magique” associée à cet opérateur est :
__floordiv__(self, other)
|
La formule générale permettant de calculer la résistance équivalente (Req) de résistances associées en parallèles est : |
class Resistance :
def __init__(self, r) :
self.value = r
def __floordiv__(self, other) :
pass # Remplacer `pass` par votre code
if __name__ == "__main__":
r1 = Resistance(470)
r2 = Resistance(220)
r3 = Resistance(820)
r12 = r1 // r2
r123 = r1 // r2 // r3
print(f"r1 // r2 : {r12.value:.2f}Ω")
print(f"r1 // r2 // r3 : {r123.value:.2f}Ω")
r1 // r2 : 149.86Ω
r1 // r2 // r3 : 126.70Ω
💻 Travail n° 3 Couleurs HTML
🎯 Travail à faire :
-
Coder une classe
CouleurHTMLqui possède :-
3 attributs d’instance :
red,green,bluequi codent — entre 0 et 255 — le niveau de rouge, vert, bleu d’une couleur HTML -
1 constructeur
__init__(self, r, g, b)qui initialise les attributs d’instances avec la valeur des paramètres qui lui sont passés.Celui-ci doit “borner” les valeurs fournies en paramètre dans l’intervalle [0,255].
Ex. :
c = CouleurHTML(-10, 20, 300)
…doit être interprété comme :
c = CouleurHTML(0, 20, 255) -
1 méthode
getLuminance()qui retourne la valeur de la sensation visuelle de luminosité de la couleur. Cette luminance est donnée par la formule :luminance = 0.299 * rouge + 0.587 * vert + 0.114 * bleu -
1 méthode
__eq__(self, other)(→ méthode “magique” qui correspond à l’opérateur==) qui teste l’égalité entre 2 couleurs en vérifiant si leurs composantes RGB sont identiques -
les méthodes :
-
__lt__(self, other)(→ opérateur<), -
__gt__(self, other)(→ opérateur>), -
__le__(self, other)(→ opérateur⇐), -
__ge__(self, other)(→ opérateur>=)…qui comparent 2 couleurs en termes de luminance.
-
-
1 méthode
__add__(self, other)qui additionne 2 couleurs.Ici, on considère que l’addition consiste à calculer la moyenne des composantes RGB des 2 couleurs.
Ex. :
CouleurHTML(255,0,255) + CouleurHTML(255,0,0) → CouleurHTML(255, 0, 128) -
1 méthode
__str__(self)qui retourne la représentation d’une couleur HTML sous la forme d’une chaîne#RRGGBBavecRR,GGetBBreprésentant les composantes RGB codées en hexadécimal. (Ex. : Rouge ⇒#FF0000)__str__(self)renvoie une représentation lisible pour l’utilisateur, tandis que__repr__(self)renvoie une représentation plus précise et non ambiguë, plutôt destinée au débogage. -
1 méthode
__repr__(self)qui retourne la représentation d’une couleur HTML sous la forme d’une chaîneCouleur(r,g,b)avecr,getbreprésentant les composantes RGB codées en décimal. (Ex. : Rouge ⇒Couleur(255,0, 0))
-
-
Vérifier votre code avec le script suivant :
class CouleurHTML : pass # Remplacer `pass` par votre code if __name__ == "__main__" : c1 = CouleurHTML(300, 128, 64) c2 = CouleurHTML( 64, 255, 0) c1_plus_c2 = c1 + c2 print(f"c1 = {c1} ({c1!r})") (1) print(f"c2 = {c2} ({c2!r})") print(f"c1_plus_c2 = {c1_plus_c2} (type : {c1_plus_c2!r})") # Détermination de la couleur de plus haute luminance c_max_lum = CouleurHTML(0,0,0) # Noir couleurs = [c1, c2, c1_plus_c2] for c in couleurs : if c >= c_max_lum : c_max_lum = c print(f"La couleur de plus haute luminance est {c_max_lum}")1 {c1}fait appel à__str__(self)et{c1!r}à__repr__(self)Résultat attendu
c1 = #FF8040 (Couleur(255,128,64)) c2 = #40FF00 (Couleur(64,255,-10)) c1_plus_c2 = #A0C020 (type : Couleur(160,192,32)) La couleur de plus haute luminance est #40FF00 -
Vérifier les résultats avec le site ColorDesigner
💻 Travail n° 4 Classe IP
🎯 Travail à faire 🔥 🔥 :
-
Toujours à partir de l’exemple donné dans Une 1ère classe, créer une classe
IPpermettant de manipuler une adresse IP d’un hôte réseau.Celle-ci doit :
-
possèder 2 attributs d’instance :
-
ip→ valeur de l’adresse IP -
mask→ masque
-
-
un constructeur
__init__()qui prend en paramètre une adresse IP et une longueur de masque (Ex. :__init(`192.168.4.5', 22) -
une méthode
getNwkAddr()qui retourne l’adresse réseau -
une méthode
getMask()qui retourne, sous forme de chaîne de caractères, le masque réseau en notation décimale pointée -
une méthode
getBcastAddr()qui retourne, sous forme de chaîne de caractères et en notation décimale pointée, l’adresse de broadcast du réseau auquel appartient l’IP -
une méthode
getMaxHosts()qui retourne le nombre max. d’hôtes du réseau auquel appartient l’IP -
une méthode
getMinIp()qui retourne la 1ère adresse disponible du réseau auquel appartient l’IP -
une méthode
getMaxIp()qui retourne la dernière adresse disponible du réseau auquel appartient l’IP -
la méthode spéciale
__repr__()qui retourne l’adresse IP sous forme de chaîne de caractères au format CIDR (→ “192.168.4.5/22”)
-
|
Vous pouvez vous servir du code source qui a été vu en co-enseignement math dans la partie qui traite des opérateurs bit-à-bit |
🞄 🞄 🞄
