Exercice Corrigé: Les classes POO Python – Partie 4

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 « Personne » avec un nom et un attribut age. Créez deux instances de la classe « Personne », définissez leurs attributs à l’aide du constructeur et affichez leur nom et leur âge.

Exemple de sortie:

Alex Babtise a 25 ans.
Emily Tonari a 18 ans.

Diagrame de classe:

Solution:

# Définir la classe Personne
class Person:
    # Constructeur de la classe Personne qui initialise 
    # les variables name et age
    def __init__(self, name, age):
        # Attribuer à la variable name la valeur du paramètre name 
        self.__name = name 
		# Attribuer à la variable age la valeur du paramètre age
        self.__age = age  

    # Méthode pour récupérer le nom de la personne
    def get_name(self):
        # Retourner la valeur de la variable name
        return self.__name

    # Méthode pour récupérer l'age de la personne
    def get_age(self):
        # Retourner la valeur de la variable age
        return self.__age

    # Méthode pour définir le nom de la personne
    def set_name(self, name):
        # Attribue à la variable name la valeur du paramètre name
        self.__name = name

    # Méthode pour définir l'age de la personne
    def set_age(self, age):
        # Attribuer à la variable age la valeur du paramètre age 
        self.__age = age


if __name__ == "__main__":
    # Créer une instance de la classe Personne
    p1 = Person("Alex Babtise", 25)
    # Créer une instance de la classe Personne
    p2 = Person("Emily Tonari", 18)

	# Afficher le nom et l'âge de p1 sur la console
    print(f"{p1.get_name()} a {p1.get_age()} ans.")
	# Afficher le nom et l'âge de p2 sur la console
    print(f"{p2.get_name()} a {p2.get_age()} ans.\n")

	# Modifier le nom et l'âge de p2 en utilisant les setter
    p2.set_name("Thomas Gozilla")
    p2.set_age(30)

	# Afficher le nom et l'âge actualisés de p2 sur la console
    print(f"{p2.get_name()} a {p2.get_age()} ans.\n")

Sortie:

Alex Babtise a 25 ans.
Emily Tonari a 18 ans.

Thomas Gozilla a 30 ans.

Explication:

Dans l’exemple ci-dessus, nous créons deux instances de la classe « Personne », nous définissons leurs attributs à l’aide du constructeur et nous affichons leur nom et leur âge à l’aide des méthodes getter. Nous modifions également les attributs à l’aide des méthodes setter et affichons les valeurs mises à jour.

 

Exercice 2:

Écrivez un programme Python pour créer une classe appelée « Chien » avec un nom et un attribut de race. Créez deux instances de la classe « Chien », définissez leurs attributs à l’aide du constructeur et modifiez les attributs à l’aide des méthodes setter, puis affichez les valeurs mises à jour.

Diagrame de classe:

Solution:

# Définir la classe Chien
class Chien:
    # Constructeur de la classe Chien qui initialise les variables
    def __init__(self, nom, race):
        self.__nom = nom  
        self.__race = race

    # Méthode pour récupérer le nom du chien
    def get_nom(self):
        return self.__nom

    # Méthode pour définir le nom du chien
    def set_nom(self, nom):
        self.__nom = nom

    # Méthode pour récupérer la race du chien
    def get_race(self):
        return self.__race

    # Méthode pour définir la race du chien
    def set_race(self, race):
        self.__race = race


# Code pour tester la classe Chien
if __name__ == "__main__":
    # Créer une instance de la classe Chien avec le nom 'Rio' et la 
    # race 'Berger allemand'
    ch1 = Chien("Rio", "Berger allemand")
    # Créer une autre instance de la classe Chien avec le nom 'Rocky' 
    # et la race 'Husky'
    ch2 = Chien("Rocky", "Husky")

    # Afficher le nom et la race de ch1 sur la console
    print(f"{ch1.get_nom()} est un {ch1.get_race()}")
    # Afficher le nom et la race de ch2 sur la console
    print(f"{ch2.get_nom()} est un {ch2.get_race()}")

    # Afficher un message indiquant que la race de ch1 et le nom de 
    # ch2 vont être modifiés
    print("\nDéfinir la nouvelle race de ch1 et le nouveau nom de ch2:")
    # Changer la race de ch1 en "Beagle"
    ch1.set_race("Beagle")
    # Changer le nom de ch2 en "Simba"
    ch2.set_nom("Simba")

    # Afficher le nom et la race mis à jour de ch1
    print(f"{ch1.get_nom()} est un {ch1.get_race()}")
    # Afficher le nom et la race mis à jour de ch2
    print(f"{ch2.get_nom()} est un {ch2.get_race()}")

Sortie:

Rio est un Berger allemand
Rocky est un Husky

Définir la nouvelle race de ch1 et le nouveau nom de ch2:
Rio est un Beagle
Simba est un Husky
 

Exercice 3:

Écrire un programme Python pour créer une classe appelée « Livre » avec des attributs pour le titre, l’auteur et l’ISBN, et des méthodes pour ajouter et supprimer des livres d’une collection.

Diagrame de classe:

Solution:

# Définir la classe Livre
class Livre:
    # Déclarez une liste pour stocker la liste d'objets de Livre
    livres = []

    # Constructeur de la classe Livre qui initialise les variables 
    # titre, auteur et ISBN
    def __init__(self, titre, auteur, ISBN):
        # Attribue à la variable 'titre' la valeur du paramètre 
        # 'titre' fourni
        self.titre = titre
        # Attribue à la variable 'auteur' la valeur du paramètre 
        # 'auteur' fourni
        self.auteur = auteur
        # Attribue à la variable 'ISBN' la valeur du paramètre 'ISBN' 
        self.ISBN = ISBN

    # Méthode pour récupérer le titre du livre
    def get_titre(self):
        # Renvoyer la valeur de la variable titre
        return self.titre

    # Méthode pour définir le titre du livre
    def set_titre(self, titre):
        # Attribue à la variable 'titre' la valeur du paramètre 
        # 'titre' fourni
        self.titre = titre

    # Méthode pour récupérer l'auteur du livre
    def get_auteur(self):
        # Renvoyer la valeur de la variable auteur
        return self.auteur

    # Méthode pour définir l'auteur du livre
    def set_auteur(self, auteur):
        # Attribue à la variable 'auteur' la valeur du paramètre 
        # 'auteur' fourni
        self.auteur = auteur

    # Méthode pour récupérer l'ISBN du livre
    def get_ISBN(self):
        # Renvoyer la valeur de la variable ISBN
        return self.ISBN

    # Méthode pour définir l'ISBN du livre
    def set_ISBN(self, ISBN):
        # Attribue à la variable 'ISBN' la valeur du paramètre 'ISBN'
        self.ISBN = ISBN

    # Méthode statique pour ajouter un livre à la collection de 
    # livres
    @staticmethod
    def add_livre(livre):
        # Ajouter l'objet livre fourni à la collection livres
        Livre.livres.append(livre)

    # Méthode statique pour supprimer un livre de la collection de 
    # livres
    @staticmethod
    def remove_livre(livre):
        # Supprime l'objet livre fourni de la collection livres
        Livre.livres.remove(livre)

    # Méthode statique pour récupérer toute la collection de livres
    @staticmethod
    def get_livres():
        # Retourner la liste de livres
        return Livre.livres


# Code pour tester la classe Livre
if __name__ == "__main__":
    # Créez une instance de la classe Livre avec titre "L'Étranger", 
    # auteur "Albert Camus", et ISBN "6547165001881"
    livre1 = Livre("L'Étranger", "Albert Camus", "6547165001881")
    # Créez une autre instance de la classe Livre avec titre "Le père 
    # Goriot", auteur "Honoré de Balzac", et ISBN "661100321741"
    livre2 = Livre("Le père Goriot", "Honoré de Balzac", "661100321741")

    # Ajouter livre1 à la collection de livres
    Livre.add_livre(livre1)
    # Ajouter livre2 à la collection de livres
    Livre.add_livre(livre2)

    # Récupérer la collection de livres et la stocker dans une liste 
    # nommée livres.
    livres = Livre.get_livres()

    # Afficher un en-tête pour la liste des livres
    print("Liste des livres:")

    # Parcourir chaque livre de la collection livres
    for l in livres:
        # Affichez le titre, l'auteur et le numéro ISBN de chaque 
        # livre.
        print(f"{l.get_titre()} par {l.get_auteur()}, ISBN: {l.get_ISBN()}")

    # Supprimer le livre 1 de la collection de livres
    Livre.remove_livre(livre1)

    # Afficher un message indiquant que le livre 1 a été supprimé
    print(f"\nAprès suppression de {livre1.get_titre()}:")

    # Afficher un en-tête pour la liste des livres mise à jour
    print("Liste des livres mise à jour:")

    # Parcourir chaque livre de la collection livres
    for l in livres:
        # Affichez le titre, l'auteur et le numéro ISBN de chaque 
        # livre.
        print(f"{l.get_titre()} par {l.get_auteur()}, ISBN: {l.get_ISBN()}")

Sortie:

Liste des livres:
L'Étranger par Albert Camus, ISBN: 6547165001881
Le père Goriot par Honoré de Balzac, ISBN: 661100321741

Après suppression de L'Étranger:
Liste des livres mise à jour:
Le père Goriot par Honoré de Balzac, ISBN: 661100321741
 

Exercice 4:

Écrire un programme Python pour créer une classe appelée « Employee » avec un nom, un poste et un salaire, ainsi que des méthodes pour calculer et mettre à jour le salaire.

Diagrame de classe:

Solution:

# Définir la classe Employee
class Employee:
    # Déclarer une variable pour stocker le nom de l'employé
    def __init__(self, nom, poste, salaire):
        # Attribue à la variable nom la valeur du paramètre nom
        self.nom = nom
        # Attribue à la variable poste la valeur du paramètre poste
        self.poste = poste
        # Attribue à la variable salaire la valeur du paramètre 
        # salaire fourni
        self.salaire = salaire

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

    # Méthode pour définir le nom de l'employé
    def set_nom(self, nom):
        # Attribue à la variable nom la valeur du paramètre nom
        self.nom = nom

    # Méthode pour récupérer le poste de l'employé
    def get_poste(self):
        # Retourner la valeur de la variable poste
        return self.poste

    # Méthode pour définir le poste de l'employé
    def set_poste(self, poste):
        # Attribue à la variable poste la valeur du paramètre poste
        self.poste = poste

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

    # Méthode pour définir le salaire de l'employé
    def set_salaire(self, salaire):
        # Attribue à la variable salaire la valeur du paramètre 
        # salaire fourni
        self.salaire = salaire

    # Méthode pour augmenter le salaire de l'employé d'un pourcentage 
    # donné
    def aug_salaire(self, pourcentage):
        # Calculer le nouveau salaire en augmentant le salaire actuel 
        # du pourcentage donné
        self.salaire += self.salaire * pourcentage / 100

    # Méthode pour afficher les détails de l'employé
    def afficher_employee(self):
        # Afficher le nom de l'employé
        print("Nom:", self.nom)
        # Afficher le poste de l'employé
        print("Poste:", self.poste)
        # Afficher le salaire de l'employé
        print("Salaire:", self.salaire)


# Code pour tester la classe Employee
if __name__ == "__main__":
    # Créer une instance de la classe Employee
    e1 = Employee("Alex Babtise", "Développeur", 80000)
    # Créer une autre instance de la classe Employee
    e2 = Employee("Emily Firoza", "Comptable", 70000)

    print("\nDétails de l'employé:")
    # Afficher les détails de e1
    e1.afficher_employee()
    # Afficher les détails de e2
    e2.afficher_employee()

    # Augmenter le salaire de e1 de 5%
    e1.aug_salaire(5)
    # Augmenter le salaire de e2 de 10%
    e2.aug_salaire(10)

    print("\nAprès l'augmentation des salaires:")
    print("\n5% pour 'Alex Babtise':")
    # Afficher les données mises à jour de e1
    e1.afficher_employee()
    print("\n10% pour 'Emily Firoza':")
    # Afficher les données mises à jour de e2
    e2.afficher_employee()

Sortie:

Détails de l'employé:
Nom: Alex Babtise
Poste: Développeur
Salaire: 80000.0
Nom: Emily Firoza
Poste: Comptable
Salaire: 70000.0

Après l'augmentation des salaires:

5% pour 'Alex Babtise':
Nom: Alex Babtise
Poste: Développeur
Salaire: 84000.0

10% pour 'Emily Firoza':
Nom: Emily Firoza
Poste: Comptable
Salaire: 77000.0
 

Exercice 5:

Écrivez un programme Python pour créer une classe appelée « Banque » avec une collection de comptes et des méthodes pour ajouter et supprimer des comptes, et pour déposer et retirer de l’argent. Définissez également une classe appelée « Compte » pour gérer les détails du compte d’un client particulier.

Diagrame de classe:


Solution:

# Définir la classe Compte
class Compte:
    # Déclarer une variable pour stocker le nom du titulaire du 
    # compte
    def __init__(self, nom, num_compte, solde):
        # Attribue à la variable nom la valeur du paramètre nom
        self.nom = nom
        # Attribue à la variable num_compte la valeur du paramètre 
        # num_compte fourni
        self.num_compte = num_compte
        # Attribue à la variable solde la valeur du paramètre solde
        self.solde = solde

    # Méthode pour récupérer le nom du titulaire du compte
    def get_nom(self):
        # Retourner la valeur de la variable nom
        return self.nom

    # Méthode pour définir le nom du titulaire du compte
    def set_nom(self, nom):
        # Attribue à la variable nom la valeur du paramètre nom
        self.nom = nom

    # Méthode pour récupérer le numéro de compte
    def get_num_compte(self):
        # Retourner la valeur de la variable num_compte
        return self.num_compte

    # Méthode pour définir le numéro de compte
    def set_num_compte(self, num_compte):
        # Attribue à la variable num_compte la valeur du paramètre 
        # num_compte fourni
        self.num_compte = num_compte

    # Méthode pour récupérer le solde du compte
    def get_solde(self):
        # Retourner la valeur de la variable solde
        return self.solde

    # Méthode pour définir le solde du compte
    def set_solde(self, solde):
        # Attribue à la variable solde la valeur du paramètre solde
        self.solde = solde

    # Méthode de dépôt d'un montant sur le compte
    def deposer(self, montant):
        # Augmenter le solde du montant spécifié
        self.solde += montant

    # Méthode de retrait d'un montant du compte
    def retirer(self, montant):
        # Réduire le solde du montant spécifié
        self.solde -= montant

    # Méthode pour récupérer les informations sur le compte
    def get_compte_info(self):
        # Renvoyer une chaîne contenant le nom, le numéro de compte 
        # et le solde
        return f"Nom: {self.nom}, Numéro de compte: {self.num_compte}, Solde: {self.solde}"

# Définir la classe Banque
class Banque:
    # Déclarer une liste pour stocker les comptes
    def __init__(self):
        # Initialiser la liste de comptes
        self.comptes = []

    # Méthode pour ajouter un compte à la liste des comptes
    def add_compte(self, compte):
        # Ajouter le compte donné à la liste de comptes
        self.comptes.append(compte)

    # Méthode pour supprimer un compte de la liste des comptes
    def remove_compte(self, compte):
        # Supprime le compte donné de la liste de comptes
        self.comptes.remove(compte)

    # Méthode pour déposer de l'argent sur un compte spécifique
    def deposer_argent(self, compte, montant):
        # Appeler la méthode de dépôt sur le compte donné avec le 
        # montant spécifié
        compte.deposer(montant)

    # Méthode pour retirer de l'argent d'un compte spécifique
    def retirer_argent(self, compte, montant):
        # Appeler la méthode de retrait sur le compte donné avec le 
        # montant spécifié
        compte.retirer(montant)

    # Méthode pour obtenir la liste de tous les comptes
    def get_comptes(self):
        # Retourner la liste des comptes
        return self.comptes

# Code pour tester la classe Compte et Banque
if __name__ == "__main__":
    # Créer un nouvel objet Banque
    b = Banque()

    # Créer trois nouveaux objets Compte avec les détails initiaux
    cpt1 = Compte("Alex Babtise", "C101", 8000)
    cpt2 = Compte("Ali Koris", "C102", 6500)
    cpt3 = Compte("Bob Finor", "C103", 50000)

    # Ajouter les trois comptes à la Banque b
    b.add_compte(cpt1)
    b.add_compte(cpt2)
    b.add_compte(cpt3)

    # Récupérer la liste des comptes de la Banque b
    comptes = b.get_comptes()

    # Parcourir chaque compte de la liste des comptes
    for cpt in comptes:
        # Afficher les informations relatives à chaque compte
        print(cpt.get_compte_info())

    # Afficher un message indiquant le début d'une opération de dépôt
    print("\nAprès avoir déposé 500 dans cpt1:")
    # Déposé 500 dans cpt1
    b.deposer_argent(cpt1, 500)
    # Affichez les informations de compte mises à jour pour cpt1
    print(cpt1.get_compte_info())

    # Afficher un message indiquant qu'il n'y a pas de transaction 
    # pour cpt2
    print("Pas de transaction dans cpt2:")
    # Afficher les informations relatives à cpt2
    print(cpt2.get_compte_info())

    # Afficher un message indiquant le début d'une opération de 
    # retrait
    print("Après avoir retiré 2000 de cpt3 :")
    # Retiré 2000 de cpt3
    b.retirer_argent(cpt3, 2000)
    # Affichez les informations de compte mises à jour pour cpt3
    print(cpt3.get_compte_info())

Sortie:

Nom: Alex Babtise, Numéro de compte: C101, Solde: 8000.0
Nom: Ali Koris, Numéro de compte: C102, Solde: 6500.0
Nom: Bob Finor, Numéro de compte: C103, Solde: 50000.0

Après avoir déposé 500 dans cpt1:
Nom: Alex Babtise, Numéro de compte: C101, Solde: 8500.0
Pas de transaction dans cpt2:
Nom: Ali Koris, Numéro de compte: C102, Solde: 6500.0
Après avoir retiré 2000 de cpt3 :
Nom: Bob Finor, Numéro de compte: C103, Solde: 48000.0
 

É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 *