Exercice Corrigé: Les classes POO Python – Partie 5

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:

Écrivez un programme Python pour créer une classe appelée « FeuDeCirculation » avec des attributs pour la couleur et la durée, et des méthodes pour changer la couleur et vérifier si le feu est rouge ou vert.

Diagrame de classe:

Solution:

# Définir la classe FeuDeCirculation
class FeuDeCirculation:
    # Constructeur pour la classe FeuDeCirculation
    def __init__(self, couleur, duree):
        # Initialiser la couleur du feu de circulation
        self.couleur = couleur
        # Initialiser la durée du feu de circulation
        self.duree = duree

    # Méthode pour changer la couleur du feu de circulation
    def changer_couleur(self, new_color):
        # Mettre à jour la variable couleur avec la nouvelle couleur
        self.couleur = new_color

    # Méthode pour vérifier si le feu est rouge
    def est_rouge(self):
        # Retourne True si la couleur est rouge, sinon retourne False
        return self.couleur == "Rouge"

    # Méthode pour vérifier si le feu est vert
    def est_vert(self):
        # Retourne True si la couleur est verte, sinon retourne False
        return self.couleur == "Vert"

    # Méthode pour obtenir la durée du feu de circulation
    def get_duree(self):
        # Renvoyer la valeur de la durée
        return self.duree

    # Méthode pour définir la durée du feu de circulation
    def set_duree(self, duree):
        # Mettre à jour la variable durée avec la nouvelle valeur
        self.duree = duree


# Code pour tester la classe FeuDeCirculation
if __name__ == "__main__":
    # Créer un nouvel objet FeuDeCirculation avec une couleur 
    # initiale 'Rouge' et une durée de 30 secondes.
    fc = FeuDeCirculation("Rouge", 30)

    # Afficher si le feu est rouge
    print("Le feu est rouge:", fc.est_rouge())

    # Afficher si le feu est vert
    print("Le feu est vert:", fc.est_vert())

    # Changer la couleur du feu de circulation en 'Vert'
    fc.changer_couleur("Vert")

    # Afficher si le feu de circulation est maintenant vert
    print("Le feu de circulation est maintenant vert:", fc.est_vert())

    # Afficher la durée du feu de circulation
    print("La durée du feu est:", fc.get_duree())

    # Définir une nouvelle durée pour le feu de circulation à 15 
    # secondes
    fc.set_duree(15)

    # Afficher la durée actualisée du feu de circulation
    print("La durée du feu est maintenant:", fc.get_duree())

Sortie:

Le feu est rouge: true
Le feu est vert: false
Le feu de circulation est maintenant vert: true
La durée du feu est: 30
La durée du feu est maintenant: 15
 

Exercice 2:

Écrire un programme Python pour créer une classe appelée « Employee » avec un nom, un salaire, une date d’embauche et une méthode pour calculer les années de service.

Diagrame de classe:

Solution:

# Importer les modules nécessaires
from datetime import datetime, timedelta

# Définir la classe Employee
class Employee:
    # Constructeur pour la classe Employee
    def __init__(self, nom, salaire, dat_embauche):
        # Initialiser le nom de l'employé
        self.nom = nom
        # Initialiser le salaire de l'employé
        self.salaire = salaire
        # Initialiser la date d'embauche de l'employé
        self.dat_embauche = dat_embauche

    # Méthode pour récupérer le nom de l'employé
    def get_nom(self):
        # Renvoyer le nom de l'employé
        return self.nom

    # Méthode pour définir le nom de l'employé
    def set_nom(self, nom):
        # Mettre à jour la variable nom avec la nouvelle valeur
        self.nom = nom

    # Méthode pour récupérer le salaire de l'employé
    def get_salaire(self):
        # Renvoyer le salaire de l'employé
        return self.salaire

    # Méthode pour définir le salaire de l'employé
    def set_salaire(self, salaire):
        # Mettre à jour la variable salaire avec la nouvelle valeur
        self.salaire = salaire

    # Méthode pour récupérer la date d'embauche de l'employé
    def get_dat_embauche(self):
        # Renvoyer la date d'embauche de l'employé
        return self.dat_embauche

    # Méthode pour définir la date d'embauche de l'employé
    def set_dat_embauche(self, dat_embauche):
        # Mettre à jour la variable dat_embauche avec la nouvelle 
        # valeur
        self.dat_embauche = dat_embauche

    # Méthode de calcul des années de service de l'employé
    def calculer_annee_service(self):
        # Calculer la période entre la date d'embauche et la date du 
        # jour, et renvoyer le nombre d'années
        today = datetime.now().date()
        return (today - self.dat_embauche).days // 365

    # Méthode pour afficher les détails de l'employé
    def afficher_employee(self):
        # Afficher le nom de l'employé
        print("\nNom:", self.nom)
        # Afficher le salaire de l'employé
        print("Salaire:", self.salaire)
        # Afficher la date d'embauche de l'employé
        print("Date d'embauche:", self.dat_embauche)


# Code pour tester la classe Employee
if __name__ == "__main__":
    # Créer un nouvel objet Employee nommé emp1
    emp1 = Employee("Alex Babtise", 80000, datetime.strptime("2024-05-01", "%Y-%m-%d").date())

    # Créer un nouvel objet Employee nommé emp2
    emp2 = Employee("Bob Kimo", 40000, datetime.strptime("2022-03-01", "%Y-%m-%d").date())

    # Afficher les détails de l'employé 1
    emp1.afficher_employee()
    # Afficher les années de service de l'employé 1
    print("Années de service:", emp1.calculer_annee_service())

    # Afficher les détails de l'employé 2
    emp2.afficher_employee()
    # Afficher les années de service de l'employé 2
    print("Années de service:", emp2.calculer_annee_service())

Sortie:

Nom: Alex Babtise
Salaire: 80000.0
Date d'embauche: 2024-05-01
Années de service: 0

Nom: Bob Kimo
Salaire: 40000.0
Date d'embauche: 2022-03-01
Années de service: 2
 

Exercice 3:

Écrire un programme Python pour créer une classe appelée « Etudiant » avec un nom, une note et des cours, ainsi que des méthodes pour ajouter et supprimer des cours.

Diagrame de classe:

Solution:

# Définir la classe Etudiant
class Etudiant:
    # Constructeur pour la classe Etudiant
    def __init__(self, nom, note):
        # Initialiser le nom de l'étudiant
        self.nom = nom
        # Initialiser la note de l'étudiant
        self.note = note
        # Initialiser la liste de cours
        self.cours = []

    # Méthode pour récupérer le nom de l'étudiant
    def get_nom(self):
        # Retourner le nom de l'étudiant
        return self.nom

    # Méthode pour récupérer la note de l'étudiant
    def get_note(self):
        # Retourner la note de l'étudiant
        return self.note

    # Méthode pour récupérer la liste de cours de l'étudiant
    def get_cours(self):
        # Retourner la liste de cours
        return self.cours

    # Méthode pour ajouter un cours à la liste des cours de 
    # l'étudiant
    def ajouter_cours(self, c):
        # Ajouter le cours donné à la liste des cours
        self.cours.append(c)

    # Méthode pour supprimer un cours de la liste des cours de 
    # l'étudiant
    def supprimer_cours(self, c):
        # Supprimer le cours donné de la liste des cours
        self.cours.remove(c)

    # Méthode pour afficher les détails de l'étudiant
    def afficher_etudiant(self):
        # Afficher le nom de l'étudiant
        print("Nom:", self.nom)
        # Afficher la note de l'étudiant
        print("Note:", self.note)


# Code pour tester la classe Etudiant
if __name__ == "__main__":
    # Créer un nouvel objet Etudiant nommé e1
    e1 = Etudiant("Alex Babtise", 18)
    # Créer un nouvel objet Etudiant nommé e2
    e2 = Etudiant("Bob Kimo", 16)

    # Afficher un en-tête pour les détails de l'étudiant
    print("Détails de l'étudiant:")
    # Afficher les données de l'étudiant 1
    e1.afficher_etudiant()
    # Afficher les données de l'étudiant 2
    e2.afficher_etudiant()

    # Ajouter des cours pour l'étudiant 1
    print("Ajouter des cours pour", e1.get_nom())
    e1.ajouter_cours("Mathématiques")
    e1.ajouter_cours("Biologie")
    e1.ajouter_cours("Histoire")

    # Afficher le nom de e1 et sa liste de cours
    print("Les cours de", e1.get_nom(), ":", e1.get_cours())

    # Ajouter des cours pour l'étudiant 2
    print("\nAjouter des cours pour", e2.get_nom())
    e2.ajouter_cours("Anglais")
    e2.ajouter_cours("Géologie")
    e2.ajouter_cours("Physique")

    # Afficher le nom de e2 et sa liste de cours
    print("Les cours de", e2.get_nom(), ":", e2.get_cours())

    # Suppression du cours 'Biologie' pour e1
    print("\nSuppression du cours 'Biologie' pour", e1.get_nom())
    # Supprimer le cours 'Biologie' des cours de e1
    e1.supprimer_cours("Biologie")

    # Afficher le nom de e1 et sa liste de cours mise à jour
    print("Les cours de", e1.get_nom(), ":", e1.get_cours())

Sortie:

Détails de l'étudiant:
Nom: Alex Babtise
Note: 18
Nom: Bob Kimo
Note: 16
Ajouter des cours pour Alex Babtise
Les cours de Alex Babtise : [Mathématiques, Biologie, Histoire]

Ajouter des cours pour Bob Kimo
Les cours de Bob Kimo : [Anglais, Géologie, Physique]

Suppression du cours 'Biologie' pour Alex Babtise
Les cours de Alex Babtise : [Mathématiques, Histoire]
 

Exercice 4:

Écrire un programme Python pour créer une classe appelée « Bibliotheque » avec une collection de livres et des méthodes pour ajouter et supprimer des livres.

Diagrame de classe:

Solution:

# Définir la classe Livre
class Livre:
    # Constructeur pour initialiser les champs titre et auteur
    def __init__(self, titre, auteur):
        # Attribuer le paramètre titre au champ titre
        self.titre = titre
        # Attribuer le paramètre auteur au champ auteur
        self.auteur = auteur

    # Méthode pour récupérer le titre
    def get_titre(self):
        # Retourner la valeur du champ titre
        return self.titre

    # Méthode Setter pour le titre
    def set_titre(self, titre):
        # Attribuer le paramètre titre au champ titre
        self.titre = titre

    # Méthode pour récupérer l'auteur
    def get_auteur(self):
        # Retourner la valeur du champ auteur
        return self.auteur

    # Méthode Setter pour l'auteur
    def set_auteur(self, auteur):
        # Attribuer le paramètre auteur au champ auteur
        self.auteur = auteur


# Définir la classe Bibliotheque
class Bibliotheque:
    # Constructeur pour initialiser la variable livres
    def __init__(self):
        # Créer une nouvelle liste pour contenir les objets Livre
        self.livres = []

    # Méthode pour ajouter un livre à la liste des livres
    def add_livre(self, livre):
        # Ajouter le livre spécifié à la liste des livres
        self.livres.append(livre)

    # Méthode pour supprimer un livre de la liste des livres
    def remove_livre(self, livre):
        # Supprimer le livre spécifié de la liste des livres
        self.livres.remove(livre)

    # Méthode pour récupérer la liste des livres
    def get_livres(self):
        # Retourner la liste des livres
        return self.livres


# Code pour tester la classe Bibliotheque et Livre
if __name__ == "__main__":
    # Créer une nouvelle instance de la classe Bibliotheque
    biblio = Bibliotheque()

    # Créer de nouveaux objets Livre avec le titre et l'auteur
    livre1 = Livre("Les Misérables", "Victor Hugo")
    livre2 = Livre("Nana", "Émile Zola")
    livre3 = Livre("Les fleurs du mal", "Baudelaire")
    livre4 = Livre("Le Cid", "Corneille")

    # Ajouter les livres à la biblio
    biblio.add_livre(livre1)
    biblio.add_livre(livre2)
    biblio.add_livre(livre3)
    biblio.add_livre(livre4)

    print("Livres dans la bibliothèque:")
    # Parcourir la liste des livres de la biblio
    for livre in biblio.get_livres():
        # Afficher le titre et l'auteur de chaque livre
        print(f"{livre.get_titre()} par {livre.get_auteur()}")

    # Supprimer un livre de la biblio
    biblio.remove_livre(livre2)
    print(f"\nLivres dans la biblio après suppression de {livre2.get_titre()} :")
    # Parcourir la liste mise à jour des livres dans la biblio
    for livre in biblio.get_livres():
        # Afficher le titre et l'auteur de chaque livre
        print(f"{livre.get_titre()} par {livre.get_auteur()}")

Sortie:

Livres dans la bibliothéque:
Les Misérables par Victor Hugo
Nana par Émile Zola
Les fleurs du mal par Baudelaire
Le Cid par Corneille

Livres dans la biblio après suppression Nana:
Les Misérables par Victor Hugo
Les fleurs du mal par Baudelaire
Le Cid par Corneille
 

Exercice 5:

Écrire un programme Python pour créer une classe appelée « Avion » avec un numéro de vol, une destination et des attributs d’heure de départ, ainsi que des méthodes pour vérifier l’état et le retard du vol.

Diagrame de classe:

Solution:

# Importer les classes datetime et timedelta
from datetime import datetime, timedelta  

# Définir la classe Avion
class Avion:
    # Constructeur pour initialiser le numéro de vol, la destination 
    # et l'heure de départ prévue
    def __init__(self, num_vol, destination, heure_depart):
        # Attribut pour stocker le numéro de vol
        self.num_vol = num_vol  
        # Attribut pour stocker la destination
        self.destination = destination  
        # Convertir l'heure de départ en datetime en combinant la 
        # date d'aujourd'hui et l'heure donnée
        self.heure_depart = datetime.combine(datetime.today(), heure_depart)  
        # Initialiser le temps de retard à 0 minutes
        self.temps_retard = 0  

    def get_num_vol(self):
        # Retourner le numéro de vol
        return self.num_vol

    def set_num_vol(self, num_vol):
        # Mettre à jour le numéro de vol
        self.num_vol = num_vol

    def get_destination(self):
        # Retourner la destination
        return self.destination

    def set_destination(self, destination):
        # Mettre à jour la destination
        self.destination = destination

    def get_heure_depart(self):
        # Retourner l'heure de départ sous forme d'objet time
        return self.heure_depart.time()  

    def set_heure_depart(self, heure_depart):
        # Mettre à jour l'heure de départ en combinant la date 
        # actuelle avec la nouvelle heure
        self.heure_depart = datetime.combine(self.heure_depart.date(), heure_depart)

    def get_temps_retard(self):
        # Retourner le temps de retard
        return self.temps_retard

    def retarder(self, minutes):
        # Mettre à jour le temps de retard
        self.temps_retard = minutes
        # Ajouter le temps de retard à l'heure de départ
        self.heure_depart += timedelta(minutes=minutes)

    def check_statut_vol(self):
        # Vérifier le statut du vol
        if self.temps_retard == 0:
            # Si pas de retard, afficher que le vol est à l'heure
            print(f"Le vol {self.num_vol} est à l'heure.")
        else:
            # Si en retard, afficher le temps de retard
            print(f"Le vol {self.num_vol} est retardé de {self.temps_retard} minutes.")

# Code pour tester la classe Avion
if __name__ == "__main__":
    # Créer des instances de la classe Avion avec numéro de vol, 
    # destination et heure de départ
    a1 = Avion("ABC123", "Paris", datetime.strptime("11:30", "%H:%M").time())
    a2 = Avion("POM569", "CasaBlanca", datetime.strptime("15:00", "%H:%M").time())
    a3 = Avion("UYT852", "Bruxelles", datetime.strptime("12:00", "%H:%M").time())

    # Afficher le statut initial des vols
    print("Statut du vol:")
    a1.check_statut_vol()  # Vérifier et afficher l'état du vol a1
    a2.check_statut_vol()  # Vérifier et afficher l'état du vol a2
    a3.check_statut_vol()  # Vérifier et afficher l'état du vol a3

    # Retarder les vols
    a1.retarder(30)  # Retarder a1 de 30 minutes
    a2.retarder(90)  # Retarder a2 de 90 minutes

    # Afficher le statut actuel des vols après les retards
    print("\nStatut actuel du vol:")
    a1.check_statut_vol()  # Vérifier et afficher l'état de a1
    a2.check_statut_vol()  # Vérifier et afficher l'état de a2
    a3.check_statut_vol()  # Vérifier et afficher l'état de a3

Sortie:

Statut du vol:
Le vol ABC123 est à l'heure.
Le vol POM569 est à l'heure.
Le vol UYT852 est à l'heure.

Statut actuel du vol:
Le vol ABC123 est retardé de 30 minutes.
Le vol POM569 est retardé de 90 minutes.
Le vol UYT852 est à l'heure.
 

Éditeur de code Python: Testez votre code en ligne!


 

QCM Python

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *