Exercice Corrigé: Les classes POO Python – Partie 8
Cet exercice de programmation orientée objet (POO) a pour but de vous aider à apprendre et à pratiquer les concepts de la POO. Toutes les questions sont testées sur Python 3.
Python La programmation orientée objet (POO) est basée sur le concept d’« objets », qui peuvent contenir des données et du code : des données sous la forme de variables d’instance (souvent connues sous le nom d’attributs ou de propriétés), et du code, sous la forme de méthodes. En d’autres termes, la POO permet d’encapsuler des propriétés et des comportements connexes dans des objets individuels.
Exercice 1:
Écrire un programme Python pour créer une classe appelée « Cours » avec des attributs pour le nom du cours, l’instructeur et le nombre des étoiles. Créer une classe fille « CoursEnLigne » qui ajoute des attributs pour la plate-forme et la durée. Implémentez des méthodes pour afficher les détails du cours et vérifier si le cours est éligible pour un certificat en fonction de sa durée.
Diagrame de classe:

# Définir la classe Cours
class Cours:
# Initialiser le nom du cours, l'instructeur et le nombre
# d'étoiles
def __init__(self, nom_cours, instructeur, etoiles):
self.nom_cours = nom_cours # Nom du cours
self.instructeur = instructeur # Instructeur
self.etoiles = etoiles # Nombre d'étoiles
# Méthode pour afficher les détails du cours
def afficher(self):
print("Nom du cours:", self.nom_cours)
print("Instructeur:", self.instructeur)
print("Étoiles:", self.etoiles)
# Méthode pour récupérer le nom du cours
def get_nom_cours(self):
return self.nom_cours
# Méthode pour récupérer l'instructeur
def get_instructeur(self):
return self.instructeur
# Méthode pour récupérer le nombre d'étoiles
def get_etoiles(self):
return self.etoiles
# Définir la classe fille CoursEnLigne qui hérite de la classe Cours
class CoursEnLigne(Cours):
# Attributs supplémentaires: la plate-forme et la durée
def __init__(self, nom_cours, instructeur, etoiles, plateforme, d):
# Appeler le constructeur de la classe mère
super().__init__(nom_cours, instructeur, etoiles)
self.platforme = plateforme # Plate-forme
self.d = d # Durée en heures
# Méthode pour afficher les détails du cours, y compris la
# plate-forme et la durée
def afficher(self):
# Appeler la méthode de la classe mère pour afficher les
# détails communs
super().afficher()
print("Plate-forme:", self.platforme)
print("Durée:", self.d, "heures")
# Méthode pour vérifier si le cours est éligible pour un
# certificat en fonction de sa durée
def est_eligible_pour_certificat(self):
# Supposons qu'un cours soit éligible pour un certificat si
# sa durée est d'au moins 12 heures.
return self.d >= 12
# Méthode pour récupérer la plate-forme
def get_plateforme(self):
return self.platforme
# Code pour tester la classe Cours et CoursEnLigne
if __name__ == "__main__":
# Créer un objet Cours
c1 = Cours("Biologie", "Dr. Alex Leon", 3)
c1.afficher()
print()
# Créer un objet CoursEnLigne
c2 = CoursEnLigne("Science", "Prof. Ali Farok", 5, "Coursera", 24)
c2.afficher()
print("Éligible pour un certificat:", c2.est_eligible_pour_certificat())
Sortie:
Nom du cours: Biologie Instructeur: Dr. Alex Leon Etoiles: 3 Nom du cours: Science Instructeur: Prof. Ali Farok Etoiles: 5 Platforme: Coursera Durée: 24 heures Eligible pour un certificat: true
Exercice 2:
Écrivez un programme Python pour créer une classe appelée « ProduitElectronique » avec des attributs pour l’ID, le nom et le prix du produit. Implémentez des méthodes pour appliquer une remise et calculer le prix final. Créez une classe fille « Refrigerateur » qui ajoute un attribut de période de garantie et une méthode pour étendre la garantie.
Diagrame de classe:

# Définir la classe ProduitElectronique
class ProduitElectronique:
# Iniatialiser l'ID, le nom et le prix du produit
def __init__(self, produit_id, nom, prix):
self.produit_id = produit_id # ID du produit
self.nom = nom # Nom du produit
self.prix = prix # Prix du produit
# Méthode pour appliquer une réduction au prix du produit
def appliquer_remise(self, pourcentage_remise):
# Calculer le montant de la remise
montant_remise = self.prix * pourcentage_remise / 100
# Soustraire le montant de la remise du prix initial
self.prix -= montant_remise
# Méthode de calcul du prix final après remise
def get_prix_final(self):
# Retourner le prix actuel qui peut avoir été réduit
return self.prix
# Méthode pour récupérer l'ID du produit
def get_produit_id(self):
return self.produit_id
# Méthode pour récupérer le nom du produit
def get_nom(self):
return self.nom
# Méthode pour récupérer le prix du produit
def get_prix(self):
return self.prix
# Définir la classe fille Refrigerateur qui hérite de ProduitElectronique
class Refrigerateur(ProduitElectronique):
# Attribut supplémentaire pour la période de garantie
def __init__(self, produit_id, nom, prix, periode_garantie):
# Appeler le constructeur de la classe mère pour initialiser
# les attributs communs
super().__init__(produit_id, nom, prix)
# Période de garantie en mois
self.periode_garantie = periode_garantie
# Méthode pour prolonger la période de garantie
def prolonger_garantie(self, additional_months):
# Ajouter les mois supplémentaires à la période de garantie
# actuelle
self.periode_garantie += additional_months
# Méthode pour récupérer la période de garantie
def get_periode_garantie(self):
return self.periode_garantie
# Surcharger la méthode d'application de remise pour inclure un
# Smessage
def appliquer_remise(self, pourcentage_remise):
# Appeler la méthode de la classe mère pour appliquer la
# Sréduction
super().appliquer_remise(pourcentage_remise)
# Afficher un message indiquant que la réduction a été
# appliquée
print("Remise appliquée au réfrigérateur:", self.get_nom())
# Code pour tester la classe ProduitElectronique
if __name__ == "__main__":
# Créer un objet ProduitElectronique
p = ProduitElectronique("P123", "Lave-vaisselle", 500.00)
# Appliquer une réduction et afficher le prix final
p.appliquer_remise(15)
print("ID du produit:", p.get_produit_id())
print("Nom:", p.get_nom())
print("Prix après réduction:", p.get_prix_final(), "€")
print()
# Créer un objet Refrigerateur
r = Refrigerateur("P789", "Réfrigérateur Samsung", 900.00, 12)
# Appliquer une réduction et afficher le prix final
r.appliquer_remise(15)
print("ID du produit:", r.get_produit_id())
print("Nom:", r.get_nom())
print("Prix après réduction:", r.get_prix_final(), "€")
# Afficher la période de garantie
print("Période de garantie:", r.get_periode_garantie(), "mois")
# Prolonger la période de garantie et afficher la nouvelle
# période
r.prolonger_garantie(12)
print("Période de garantie après prolongation:", r.get_periode_garantie(), "mois")
Sortie:
ID du produit: P123 Nom: Lave-vaisselle Prix après réduction: 425.0 € Remise appliquée au refrigérateur: Réfrigérateur Samsung ID du produit: P789 Nom: Réfrigérateur Samsung Prix après réduction: 765.0 € Période de garantie: 12 mois Période de garantie après prolongation: 24 mois
Exercice 3:
Écrire un programme Python pour créer une classe appelée « Batiment » avec des attributs pour l’adresse, le nombre d’étages et la surface totale. Créez des sous-classes « BatimentResidentiel » et « BatimentCommercial » qui ajoutent des attributs spécifiques tels que le nombre d’appartements pour les bâtiments résidentiels et l’espace de bureau pour les bâtiments commerciaux. Implémentez une méthode pour calculer le loyer total pour chaque sous-classe.
Diagrame de classe:

# Définir la classe Batiment
class Batiment:
# Initialiser les attributs de la classe Batiment
def __init__(self, adresse, nombre_detages, surface_totale):
# Adresse du bâtiment
self.adresse = adresse
# Nombre d'étages
self.nombre_detages = nombre_detages
# Surface totale en mètres carrés
self.surface_totale = surface_totale
# Méthode pour afficher des informations sur le bâtiment
def afficher(self):
print("Adresse:", self.adresse)
print("Nombre d'étages:", self.nombre_detages)
print("Surface totale:", self.surface_totale, "mètres carrés")
# Définir la classe BatimentResidentiel qui hérite de Batiment
class BatimentResidentiel(Batiment):
# Attributs supplémentaires pour BatimentResidentiel
def __init__(self, adresse, nombre_detages, surface_totale, nombre_d_appartements, loyer_par_appartement):
# Appeler le constructeur de la classe mère
super().__init__(adresse, nombre_detages, surface_totale)
# Nombre d'appartements
self.nombre_d_appartements = nombre_d_appartements
# Loyer par appartement
self.loyer_par_appartement = loyer_par_appartement
# Méthode pour calculer le loyer total d'un bâtiment résidentiel
def calculate_total_rent(self):
return self.nombre_d_appartements * self.loyer_par_appartement
# Surcharger la méthode afficher pour inclure des détails
# supplémentaires
def afficher(self):
super().afficher()
print("Nombre d'appartements:", self.nombre_d_appartements)
print("Loyer par appartement:", self.loyer_par_appartement, "€")
print("Total des loyers:", self.calculate_total_rent(), "€")
# Définir la classe BatimentCommercial qui hérite de Batiment
class BatimentCommercial(Batiment):
# Attributs supplémentaires pour BatimentCommercial
def __init__(self, adresse, nombre_detages, surface_totale, espace_bureau, loyer_par_metre_carre):
# Appeler le constructeur de la classe mère
super().__init__(adresse, nombre_detages, surface_totale)
# Espace de bureau en mètres carrés
self.espace_bureau = espace_bureau
# Loyer par mètre carré
self.loyer_par_metre_carre = loyer_par_metre_carre
# Méthode pour calculer le loyer total d'un bâtiment commercial
def calculate_total_rent(self):
return self.espace_bureau * self.loyer_par_metre_carre
# Surcharger la méthode afficher pour inclure des détails
# supplémentaires
def afficher(self):
super().afficher()
print("Espace de bureau:", self.espace_bureau, "mètres carrés")
print("Loyer par mètre carré:", self.loyer_par_metre_carre, "€")
print("Total des loyers:", self.calculate_total_rent(), "€")
# Code de test
if __name__ == "__main__":
# Créer une instance de BatimentResidentiel
r = BatimentResidentiel("Rue 30, Quartier Saindenis", 15, 23000.0, 30, 1500.0)
# Créer une instance de BatimentCommercial
c = BatimentCommercial("Rue 11, Quartier Laurence", 20, 5000.0, 4000.0, 25.0)
# Afficher des informations sur le bâtiment résidentiel
print("Info sur le bâtiment résidentiel:")
r.afficher()
# Afficher des informations sur le bâtiment commercial
print("\nInfo sur le bâtiment commercial:")
c.afficher()
Sortie:
Info sur le bâtiment résidentiel: Adresse: Rue 30, Quartier Saindenis Nombre d'étages: 15 Surface totale: 23000.0 mètres Nombre d'appartements: 30 Loyer par appartement: 1500.0 € Total des loyers: 45000.0 € Info sur le bâtiment commercial: Adresse: Rue 11, Quartier Laurence Nombre d'étages: 20 Surface totale: 5000.0 mètres Espace de bureau: 4000.0 mètres Loyer par mètre carré: 25.0 € Total des loyers: 100000.0 €
Exercice 4:
Écrire un programme Python pour créer une classe appelée « Evenement » avec des attributs pour le nom de l’événement, la date et le lieu. Créer des sous-classes « Seminaire » et « PerformancesMusicales » qui ajoutent des attributs spécifiques tels que le nombre de conférenciers pour les séminaires et la liste des artistes pour les concerts. Implémenter des méthodes pour afficher les détails de l’événement et vérifier s’il y a des conflits dans le planning de l’événement.
Diagrame de classe:

from datetime import datetime
from typing import List
# Définir la classe Evenement
class Evenement:
# Déclarer les attributs: nomEvenement, date et lieu
def __init__(self, nom_evenement: str, date: datetime, lieu: str):
self.nom_evenement = nom_evenement # Nom de l'événement
self.date = date # Date de l'événement
self.lieu = lieu # Lieu de l'événement
# Afficher le nom, la date et le lieu de l'événement
def afficher(self):
print("Nom de l'événement:", self.nom_evenement)
print("Date:", self.date)
print("Lieu:", self.lieu)
# Vérifie si l'événement en cours entre en conflit avec un autre
# événement
def check_conflit(self, e) -> bool:
return self.date == e.date and self.lieu == e.lieu
# Définir la classe Séminaire qui hérite d'Evenement
class Seminaire(Evenement):
# Déclarer l'attribut supplémentaire pour le nombre de
# conférenciers
def __init__(self, nom_evenement: str, date: datetime, lieu: str, nombre_de_conf: int):
super().__init__(nom_evenement, date, lieu)
# Nombre de conférenciers
self.nombre_de_conf = nombre_de_conf
def afficher(self):
super().afficher()
print("Nombre de conférenciers:", self.nombre_de_conf)
# Définir la classe PerformancesMusicales qui hérite d'Evenement
class PerformancesMusicales(Evenement):
# Déclarer l'attribut supplémentaire pour la liste des artistes
def __init__(self, nom_evenement: str, date: datetime, lieu: str, artistes: List[str]):
super().__init__(nom_evenement, date, lieu)
self.artistes = artistes # Liste des artistes
def afficher(self):
super().afficher()
print("Artistes:", ", ".join(self.artistes))
# Code de test
if __name__ == "__main__":
# Créer des dates différentes pour éviter les conflits
date = datetime.now() # Créer une date pour les tests
# Créer une instance de Seminaire
seminar = Seminaire("La journée d'étude", date, "Centre de congrès", 4)
# Créer une instance de PerformancesMusicales
artistes = ["Groupe A", "Groupe B"]
performance = PerformancesMusicales("Teintes harmonieuses", date, "Centre de congrès", artistes)
# Afficher les détails du séminaire
print("Les détails du séminaire:")
seminar.afficher()
# Afficher les détails de la performance musicale
print("\nLes détails de la performance musicale:")
performance.afficher()
# Vérifier s'il y a des conflits d'horaire
if seminar.check_conflit(performance):
print("\nConflit détecté : Les deux événements sont programmés à la même heure et au même endroit.")
else:
print("\nPas de conflit : Les événements sont programmés à des moments ou dans des lieux différents.")
Sortie:
Les détails du séminaire: Nom de l'événement: La journée d'étude Date: Sun Sep 29 18:17:37 GMT 2024 Lieu: Centre de congrès Nombre de conférenciers: 4 Les détails de la performance musicale: Nom de l'événement: Teintes harmonieuses Date: Sun Sep 29 18:17:37 GMT 2024 Lieu: Centre de congrès Artistes: Groupe A, Groupe B Conflit détecté : Les deux événements sont programmés à la même heure et au même endroit.
Exercice 5:
Écrivez un programme Python pour créer une classe appelée « CommandeClient » avec des attributs pour l’ID de la commande, le client et la date de la commande. Créez une sous-classe « CommandeEnLigne » qui ajoute des attributs pour l’adresse de livraison et le numéro de suivi. Implémentez des méthodes pour calculer le délai de livraison en fonction de l’adresse et mettre à jour le statut de la livraison.
Diagrame de classe:

from datetime import datetime
# Définir la classe CommandeClient
class CommandeClient:
# Initialiser l'ID de la commande, le client et la date de la
# commande
def __init__(self, id_commande: str, client: str, date_commande: datetime):
self.id_commande = id_commande # ID de la commande
self.client = client # Client
self.date_commande = date_commande # Date de la commande
# Méthode pour récupérer l'ID de la commande
def get_id_commande(self) -> str:
return self.id_commande
# Méthode pour récupérer le client
def get_client(self) -> str:
return self.client
# Méthode pour récupérer la date de la commande
def get_date_commande(self) -> datetime:
return self.date_commande
# Méthode pour afficher les détails de la commande
def afficher(self):
print("ID de la commande:", self.id_commande)
print("Client:", self.client)
print("Date de la commande:", self.date_commande.date())
# Définir la sous-classe CommandeEnLigne qui hérite de CommandeClient
class CommandeEnLigne(CommandeClient):
# Attributs spécifiques pour l'adresse de livraison et le numéro
# de suivi
def __init__(self, id_commande: str, client: str, date_commande: datetime, adresse_livraison: str, num_suivi: str):
# Appeler le constructeur de la classe mère
super().__init__(id_commande, client, date_commande)
# Adresse de livraison
self.adresse_livraison = adresse_livraison
# Numéro de suivi
self.num_suivi = num_suivi
# Méthode pour récupérer l'adresse de livraison
def get_adresse_livraison(self) -> str:
return self.adresse_livraison
# Méthode pour récupérer le numéro de suivi
def get_num_suivi(self) -> str:
return self.num_suivi
# Méthode pour calculer le délai de livraison
def calculer_delai_livraison(self) -> int:
# Supposons que le délai de livraison est basé sur la
# longueur de la chaîne d'adresse
return len(self.adresse_livraison) % 10 + 1
# Méthode de mise à jour de l'état de suivi
def actualiser_etat_suivi(self, new_etat: str):
# Afficher l'état de suivi mis à jour
print("Numéro de suivi:", self.num_suivi, "- État:", new_etat)
# Surcharger la méthode afficher pour inclure des détails
# supplémentaires
def afficher(self):
super().afficher() # Appeler la méthode de la classe mère
# Afficher des détails supplémentaires pour la commande en
# ligne
print("Adresse de livraison:", self.adresse_livraison)
print("Numéro de suivi:", self.num_suivi)
# Code de test
if __name__ == "__main__":
# Créer un objet CommandeClient
c1 = CommandeClient("C123", "Alex Leo", datetime.now())
# Afficher les détails de la commande
c1.afficher()
print()
# Créer un objet CommandeEnLigne
c2 = CommandeEnLigne("C789", "Ali Boura", datetime.now(), "Rue 30, Quartier Saindenis", "Ref129")
# Afficher les détails de la commande en ligne
c2.afficher()
# Calculer et afficher le délai de livraison
t = c2.calculer_delai_livraison()
print("Délai de livraison estimé:", t, "jours")
# Mettre à jour et afficher l'état de la commande
c2.actualiser_etat_suivi("En cours de route")
Sortie:
ID de la commande: C123 Client: Alex Leo Date de la commande: 2024-09-29 ID de la commande: c789 Client: Ali Boura Date de la commande: 2024-09-29 Adresse de livraison: Rue 30, Quartier Saindenis Numéro de suivi: Ref129 Délai de livraison estimé: 7 jours Numéro de suivi: Ref129 - Etat: En cours de route
Éditeur de code Python: Testez votre code en ligne!
Exercice Corrigé: Les classes POO Python – Partie 2
Exercice Corrigé: Les classes POO Python – Partie 3
Exercice Corrigé: Les classes POO Python – Partie 4
Exercice Corrigé: Les classes POO Python – Partie 5
Exercice Corrigé: Les classes POO Python – Partie 6
Exercice Corrigé: Les classes POO Python – Partie 7
Exercice Corrigé: Les classes POO Python – Partie 8
Exercice Corrigé: Les classes POO Python – Partie 9
QCM Python – Partie 1Bienvenue dans notre QCM Python ! Que vous soyez débutant ou déjà expérimenté en programmation, ce questionnaire à choix multiples est l’occasion parfaite de tester…Lire plus
- Exercice Corrigé Python pour Débutant – Partie 1
- Exercice Corrigé Python pour Débutant – Partie 2
- Exercice Corrigé Python pour Débutant – Partie 3
- Exercice Corrigé Python pour Débutant – Partie 4
- Exercice Corrigé: Boucle While en Python
- Exercice Corrigé: Boucle For en Python
- Exercice Corrigé: Les chaînes de caractères en Python – Partie 1
- Exercice Corrigé: Les chaînes de caractères en Python – Partie 2
- Exercice Corrigé: Les chaînes de caractères en Python – Partie 3
- Exercice Corrigé: Les chaînes de caractères en Python – Partie 4
- Exercice Corrigé: Les chaînes de caractères en Python – Partie 5
- Exercice Corrigé: Les chaînes de caractères en Python – Partie 6
- Exercice Corrigé: Booléens en Python
- Exercice Corrigé: Les fonctions en Python
- Exercice Corrigé: Math en Python
- Exercice Corrigé: Gestion des exceptions en Python
- Exercice Corrigé: Les fichiers en Python – Partie 1
- Exercice Corrigé: Les fichiers en Python – Partie 2
- Exercice Corrigé: Les listes en Python – Partie 1
- Exercice Corrigé: Les listes en Python – Partie 2
- Exercice Corrigé: Les listes en Python – Partie 3
- Exercice Corrigé: Les listes en Python – Partie 4
- Exercice Corrigé: Les listes en Python – Partie 5
- Exercice Corrigé: Les listes en Python – Partie 6
- Exercice Corrigé: Les listes en Python – Partie 7
- Exercice Corrigé: Les listes en Python – Partie 8
- Exercice Corrigé: Les listes en Python – Partie 9
- Exercice Corrigé: Les listes en Python – Partie 10
- Exercice Corrigé: Les listes en Python – Partie 11
- Exercice Corrigé: Les listes en Python – Partie 12
- Exercice Corrigé: Les tuples en Python
- Exercice Corrigé: Les ensembles(Set) en Python
- Exercice Corrigé: Les dictionnaires en Python – Partie 1
- Exercice Corrigé: Les dictionnaires en Python – Partie 2
- Exercice Corrigé: Les dictionnaires en Python – Partie 3
- Exercice Corrigé: Les dictionnaires en Python – Partie 4
- Exercice Corrigé: Les expressions régulières en Python – Partie 1
- Exercice Corrigé: Les expressions régulières en Python – Partie 2
- Exercice Corrigé: Les expressions régulières en Python – Partie 3
- Exercice Corrigé: Les expressions régulières en Python – Partie 4
- Exercice Corrigé: Les classes POO Python – Partie 1
- Exercice Corrigé: Les classes POO Python – Partie 2
- Exercice Corrigé: Les classes POO Python – Partie 3
- Exercice Corrigé: Les classes POO Python – Partie 4
- Exercice Corrigé: Les classes POO Python – Partie 5
- Exercice Corrigé: Les classes POO Python – Partie 6
- Exercice Corrigé: Les classes POO Python – Partie 7
- Exercice Corrigé: Les classes POO Python – Partie 8
- Exercice Corrigé: Les classes POO Python – Partie 9
- Exercice Corrigé: NumPy – Partie 1
- Exercice Corrigé: NumPy – Partie 2
- Exercice Corrigé: NumPy – Partie 3
- Exercice Corrigé: NumPy – Partie 4
- Exercice Corrigé: NumPy – Partie 5
- Exercice Corrigé: NumPy – Partie 6
- Exercice Corrigé: NumPy – Partie 7
- Exercice Corrigé: NumPy – Partie 8
- Exercice Corrigé: Python Avancé – Partie 1
- Exercice Corrigé: Python Avancé – Partie 2
- Exercice Corrigé: Python Avancé – Partie 3
- Exercice Corrigé: Python Avancé – Partie 4
- Exercice Python Corrigé En Ligne – Partie 1
- Exercice Python Corrigé En Ligne – Partie 2
- Exercice Python Corrigé En Ligne – Partie 3



