Exercice Corrigé: Les classes POO Python – Partie 1

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:

Ecrivez un programme Python pour créer une classe Vehicule avec les attributs vitesse_max et kilometrage. Créez une instance de la classe Vehicule et afficher les valeurs de ses attributs.

Solution:

# Créer une classe nommée Vehicule
class Vehicule:
    # Créer le constructeur pour initialiser les attributs
    def __init__(self, vitesse_max, kilometrage):
        self.vitesse_max = vitesse_max
        self.kilometrage = kilometrage

# Créer un objet(instance) de la classe Vehicule
v = Vehicle(220, 14000)
# Afficher les valeurs des attributs de l'objet 'v'.
print(v.vitesse_max, v.kilometrage)

Sortie:

220 14000
 

Exercice 2:

Créer une classe Vehicule sans variables ni méthodes

Solution:

class Vehicule:
    pass

Explication:

L’instruction pass est utilisée comme un espace réservé pour le futur code. Lorsque l’instruction pass est exécutée, il ne se passe rien, mais vous évitez d’obtenir une erreur lorsque le code vide n’est pas autorisé. Un code vide n’est pas autorisé dans les définitions de classes.

 

Exercice 3:

Écrivez un programme Python pour créer deux classes vides, Etudiant et Note. Créez maintenant quelques instances et vérifiez si elles sont ou non des instances de ces classes. Vérifiez également si ces classes sont des sous-classes de la classe Object ou non.

Solution:

class Etudiant:
    pass 
class Note:
    pass 

etudiant1 = Etudiant()
note1 = Note()

print(isinstance(etudiant1, Etudiant))  # True
print(isinstance(note1, Etudiant))      # False
print(isinstance(note1, Note))          # True
print(isinstance(etudiant1, Note))      # False

print(issubclass(Etudiant, object))  # True
print(issubclass(Note, object))      # True

Explication:

  • La fonction Python isinstance() renvoie la valeur True si l’objet appartient aux types spécifiés, et False s’il ne correspond pas aux types spécifiés.
  • La fonction Python issubclass() est une fonction utilisée pour vérifier si une classe est une sous-classe d’une autre classe ou non. Cette fonction renvoie True si la classe donnée est la sous-classe de la classe donnée, sinon elle renvoie False. Nous pouvons vérifier l’héritage d’une classe en Python en utilisant issubclass().
 

Exercice 4:

Écrivez une classe Python nommée Etudiant avec deux attributs nom_etudiant, notes. Modifiez les valeurs des attributs de cette classe et affichez les valeurs originales et modifiées de ces attributs.

Solution:

class Etudiant:
    nom_etudiant = 'Alex Babtise'
    notes = 96  

# Afficher les valeurs originales
print(f"Nom de l'étudiant: {getattr(Etudiant, 'nom_etudiant')}")
print(f"Notes: {getattr(Etudiant, 'notes')}")

# Modifier les valeurs des attributs
setattr(Etudiant, 'nom_etudiant', 'Emily Finoris')
setattr(Etudiant, 'notes', 88) 

# Afficher les valeurs modifiées 
print(f"Nom de l'étudiant: {getattr(Etudiant, 'nom_etudiant')}")
print(f"Notes: {getattr(Etudiant, 'notes')}")

Sortie:

Nom de l'étudiant: Alex Babtise
Notes: 96
Nom de l'étudiant: Emily Finoris
Notes: 88
 

Exercice 5:

Écrivez une classe Python nommée Etudiant avec deux attributs: id_etudiant, nom_etudiant. Créez une fonction display() pour afficher tous les attributs et leurs valeurs dans la classe Etudiant.

Solution:

class Etudiant:
    id_etudiant = '101'
    nom_etudiant = 'Alex Babtise'
    def display():
        print(f"ID de l'étudiant: {Etudiant.id_etudiant}\nNom de l'étudiant: {Etudiant.nom_etudiant}")

print("Attributs et leurs valeurs de la classe Student:")
Etudiant.display()

Sortie:

Attributs et leurs valeurs de la classe Student:
ID de l'étudiant: 101
Nom de l'étudiant: Alex Babtise
 

Exercice 6:

Écrire une classe Python Employee avec des attributs comme emp_id, emp_name, emp_salary, et emp_department et des méthodes comme calculer_emp_salary, emp_affecter_department, et afficher_employee.

Exemple de données relatives à un employé :

+---------+----------+------------+-----------------+
| emp_id  | emp_name | emp_salary |  emp_department |
+---------+----------+------------+-----------------+ 
| E1001   | Alex     | 20000      |  Comptabilité   |
| E1002   | Emily    | 56000      |  Finance        |
| E1003   | Bob      | 12000      |  Opérations     |
| E1004   | Jean     | 80000      |  Vents          |
+---------+----------+------------+-----------------+ 
  • Utilisez la méthode « emp_affecter_department » pour modifier le département d’un employé.
  • Utilisez la méthode « afficher_employee » pour afficher les détails d’un employé.
  • La méthode « calculer_emp_salary » prend deux arguments: le salaire et heures_travaillees, qui est le nombre d’heures travaillées par l’employé. Si le nombre d’heures travaillées est supérieur à 50, la méthode calcule les heures supplémentaires et les ajoute au salaire. Les heures supplémentaires sont calculées selon la formule suivante:
    • heures supplémentaires = heures_travaillees – 50
    • Montant des heures supplémentaires = (heures supplémentaires * (salaire / 50))
Solution:

class Employee:
    def __init__(self, emp_name, emp_id, salary, emp_department):
        self.name = emp_name
        self.id = emp_id
        self.salary = salary
        self.department = emp_department 

    def calculer_emp_salary(self, salary, heures_travaillees):
        heures_supp = 0
        if heures_travaillees > 50:
            heures_supp = heures_travaillees - 50
        self.salary = self.salary + (heures_supp * (self.salary / 50))

    def emp_affecter_department(self, emp_department):
        self.department = emp_department

    def afficher_employee(self):
        print("ID: ", self.id)
        print("Nom: ", self.name)
        print("Salaire: ", self.salary)
        print("Département: ", self.department)
        print("----------------------")


emp1 = Employee("E1001", "Alex", 20000, "Comptabilité")
emp2 = Employee("E1002", "Emily", 56000, "Finance")
emp3 = Employee("E1003", "Bob", 12000, "Opérations")
emp4 = Employee("E1004", "Jean", 80000, "Vents")

print("Détails de l'employé:")
emp1.afficher_employee()
emp2.afficher_employee()
emp3.afficher_employee()
emp4.afficher_employee()

# Modifier les départements de emp1 et emp4
emp1.emp_affecter_department("Recherche")
emp4.emp_affecter_department("Informatique")

# Calculez maintenant les heures supplémentaires des salariés éligibles.
emp2.calculer_emp_salary(56000, 25)
emp4.calculer_emp_salary(56000, 44)

print("Employé mit à jour:")
emp1.afficher_employee()
emp2.afficher_employee()
emp3.afficher_employee()
emp4.afficher_employee()

Sortie:

Détails de l'employé:
ID:  Alex
Nom:  E1001
Salaire:  20000
Département:  Comptabilité
----------------------
ID:  Emily
Nom:  E1002
Salaire:  56000
Département:  Finance
----------------------
ID:  Bob
Nom:  E1003
Salaire:  12000
Département:  Opérations
----------------------
ID:  Jean
Nom:  E1004
Salaire:  80000
Département:  Vents
----------------------

Employé mit à jour:
ID:  Alex
Nom:  E1001
Salaire:  20000
Département:  Recherche
----------------------
ID:  Emily
Nom:  E1002
Salaire:  56000.0
Département:  Finance
----------------------
ID:  Bob
Nom:  E1003
Salaire:  12000
Département:  Opérations
----------------------
ID:  Jean
Nom:  E1004
Salaire:  80000.0
Département:  Informatique
----------------------
 

Exercice 7:

Écrivez une classe Python Restaurant avec des attributs comme menu_plats, reserver_table, et commandes_clients, et des méthodes comme ajouter_plats_au_menu, reserverTable, et commandesClient.

Effectuez maintenant les tâches suivantes :

  • Ajouter des plats au menu.
  • Réserver des tables.
  • Prendre les commandes des clients.
  • Afficher le menu.
  • Afficher les réservations de table.
  • Afficher les commandes des clients.

Remarque: utilisez des dictionnaires et des listes pour stocker les données.

Solution:

class Restaurant:
    def __init__(self):
        self.menu_plats = {}
        self.reserver_table = []
        self.commandes_clients = []

    def ajouter_plats_au_menu(self, plat, prix):
        self.menu_plats[plat] = prix

    def reserverTable(self, id_table):
        self.reserver_table.append(id_table)

    def commandesClient(self, id_table, commande):
        commande_info = {'id_table': id_table, 'commande': commande}
        self.commandes_clients.append(commande_info)

    def afficher_plats_menu(self):
        for plat, prix in self.menu_plats.items():
            print("{}: {}".format(plat, prix))

    def afficher_table_reservations(self):
        for table in self.reserver_table:
            print("Table {}".format(table))

    def afficher_commandes_clients(self):
        for commande in self.commandes_clients:
            print("Table {}: {}".format(commande['id_table'], commande['commande']))

restaurant = Restaurant()

# Ajouter des plats
restaurant.ajouter_plats_au_menu("Pizzas", 9.99)
restaurant.ajouter_plats_au_menu("Salade", 8)
restaurant.ajouter_plats_au_menu("Crêpe", 19.99)
restaurant.ajouter_plats_au_menu("Sandwichs", 3.99)
restaurant.ajouter_plats_au_menu("Fish & Chips:", 15)

# Réservez les tables
restaurant.reserverTable(1)
restaurant.reserverTable(2)
restaurant.reserverTable(3)

# Commander des plats
restaurant.commandesClient(1, "Pizzas")
restaurant.commandesClient(1, "Crêpe")
restaurant.commandesClient(2, "Sandwichs")
restaurant.commandesClient(2, "Crêpe")

print("\nPlats du restaurant et leurs prix:")
restaurant.afficher_plats_menu()

print("\nTable réservée dans le restaurant:")
restaurant.afficher_table_reservations()

print("\nAfficher les commandes des clients:")
restaurant.afficher_commandes_clients()

Sortie:

Plats du restaurant et leurs prix:
Pizzas: 9.99
Salade: 8
Crêpe: 19.99
Sandwichs: 3.99
Fish & Chips:: 15

Table réservée dans le restaurant:
Table 1
Table 2
Table 3

Afficher les commandes des clients:
Table 1: Pizzas
Table 1: Crêpe
Table 2: Sandwichs
Table 2: Crêpe
 

Exercice 8:

Écrire une classe Python BankAccount avec des attributs tels que numero_compte, solde, date_ouverture et nom_du_client, et des méthodes telles que versement, retrait et vérification du solde.

Solution:

class BankAccount:
    def __init__(self, numero_compte, date_ouverture, solde, nom_du_client):
        self.numero_compte = numero_compte
        self.date_ouverture  = date_ouverture 
        self.solde = solde
        self.nom_du_client = nom_du_client
        
    def verser(self, montant):
        self.solde += montant
        print(f"{montant}€ a été déposé sur votre compte.")
    
    def retirer(self, montant):
        if montant > self.solde:
            print("Solde insuffisant.")
        else:
            self.solde -= montant
            print(f"{montant}€ a été retiré de votre compte.")
            
    def verifier_solde(self):
        print(f"Le solde actuel est {self.solde}€.")
        
    def afficher_details_client(self):
        print("Nom:", self.nom_du_client)
        print("Numéro de compte:", self.numero_compte)
        print("Date d'ouverture:", self.date_ouverture)
        print(f"Solde: {self.solde}€\n")   

# Saisir les données du client
compte1 = BankAccount(1001, "01-11-2025", 1000, "Alex Babtise")
compte2 = BankAccount(1002, "11-04-2025", 2000, "Emily Doglas")
compte3 = BankAccount(1003, "12-01-2024", 3000, "Bob Firouq")
compte4 = BankAccount(1004, "01-01-2025", 3000, "Jean Kanira")
compte5 = BankAccount(1005, "01-06-2025", 4000, "Ali Portois")

print("Détails du client:")
compte1.afficher_details_client()
compte2.afficher_details_client()
compte3.afficher_details_client()
compte4.afficher_details_client()
compte5.afficher_details_client()

print("=============================")
compte4.afficher_details_client()
compte4.verser(1000)
compte4.verifier_solde()
compte4.retirer(5000)
compte4.retirer(3500)
compte4.verifier_solde()

Sortie:

Détails du client:
Nom: Alex Babtise
Numéro de compte: 1001
Date d'ouverture: 01-11-2025
Solde: 1000€

Nom: Emily Doglas
Numéro de compte: 1002
Date d'ouverture: 11-04-2025
Solde: 2000€

Nom: Bob Firouq
Numéro de compte: 1003
Date d'ouverture: 12-01-2024
Solde: 3000€

Nom: Jean Kanira
Numéro de compte: 1004
Date d'ouverture: 01-01-2025
Solde: 3000€

Nom: Ali Portois
Numéro de compte: 1005
Date d'ouverture: 01-06-2025
Solde: 4000€

=============================
Nom: Jean Kanira
Numéro de compte: 1004
Date d'ouverture: 01-01-2025
Solde: 3000€

1000€ a été déposé sur votre compte.
Le solde actuel est 4000€.
Solde insuffisant.
3500€ a été retiré de votre compte.
Le solde actuel est 500€.
 

Exercice 9:

Après l’exercice 1, créer une classe fille Bus qui héritera de toutes les variables et méthodes de la classe Vehicule. Créez une instance de la classe fille Bus et afficher les valeurs de ses attributs.

Solution:

class Vehicule:
    def __init__(self, nom, vitesse_max, kilometrage):
        self.nom = nom
        self.vitesse_max = vitesse_max
        self.kilometrage = kilometrage

class Bus(Vehicule):
    pass

b = Bus("Mercedes", 220, 14000)
print("Nom du véhicule:", b.nom, "| Vitesse:", b.vitesse_max, "| Kilométrage:", b.kilometrage)

Sortie:

Nom du véhicule: Mercedes | Vitesse: 220 | Kilométrage: 14000
 

Exercice 10:

Créez une classe Bus qui hérite de la classe Véhicule. Surcharger la méthode nombre_de_places() dans la classe fille avec une valeur par défaut de 50. Utilisez le code suivant pour la classe mère Véhicule.

class Vehicule:
    def __init__(self, nom, vitesse_max, kilometrage):
        self.nom = nom
        self.vitesse_max = vitesse_max
        self.kilometrage = kilometrage

    def nombre_de_places(self, capacite):
        return f"La capacité de {self.nom} est {capacite} passagers"
Solution:

class Vehicule:
    def __init__(self, nom, vitesse_max, kilometrage):
        self.nom = nom
        self.vitesse_max = vitesse_max
        self.kilometrage = kilometrage

    def nombre_de_places(self, capacite):
        return f"La capacité de {self.nom} est {capacite} passagers"

class Bus(Vehicule):
    # attribuer une valeur par défaut à l'argument capacité
    def nombre_de_places(self, capacite=50):
        return super().nombre_de_places(capacite=50)

b = Bus("Bus Mercedes", 220, 14000)
print(b.nombre_de_places())

Sortie:

La capacité de Bus Mercedes est 50 passagers
 

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


 

QCM Python

2 réflexions sur “Exercice Corrigé: Les classes POO Python – Partie 1

  • février 25, 2025 à 9:50 am
    Permalien

    Exercice Corrigé : Les classes POO Python – Partie 1 exercice 4 et 5
    Remarque :
    Les énoncés ne sont pas clairs dans la mesure où il n’est pas précisé attribut de classe!!!
    exercice 4:
    Écrivez une classe Python nommée Etudiant avec deux attributs nom_etudiant, notes. Modifiez les valeurs des attributs de cette classe et affichez les valeurs originales et modifiées de ces attributs.

    exercice 5:
    Écrivez une classe Python nommée Etudiant avec deux attributs: id_etudiant, nom_etudiant. Créez une fonction display() pour afficher tous les attributs et leurs valeurs dans la classe Etudiant.

    Répondre
    • février 25, 2025 à 1:32 pm
      Permalien

      Salut! Pour l’exercice 4, il s’agit d’une classe simple avec des attributs d’instance (nom_etudiant, notes), donc on modifie directement les valeurs de ces attributs. Pour l’exercice 5, si tu veux créer une fonction display(), il faut simplement afficher les attributs d’instance comme id_etudiant et nom_etudiant dans cette fonction. J’espère que ça t’aide à clarifier les choses ! Si tu as d’autres questions, n’hésite pas. »

      Répondre

Laisser un commentaire

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