0% ont trouvé ce document utile (0 vote)
54 vues4 pages

TP Python : Pile et POO en Algorithmes

Transféré par

nassim.bnckh
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
54 vues4 pages

TP Python : Pile et POO en Algorithmes

Transféré par

nassim.bnckh
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

TP1 Conception d’algorithmes

Dr. Kaoutar SENHAJI


8 octobre 2024

Introduction
Ce TP a pour but de découvrir la programmation orientée objet en Py-
thon. Nous allons explorer plusieurs concepts, tels que :
— Les classes et objets en Python.
— Les constructeurs et destructeurs.
— L’opérateur d’affectation et le constructeur de copie.
— La surcharge d’opérateurs.
— L’utilisation d’une pile en programmation.

1 Notion de Pile
Une pile (“stack” en anglais) est une structure de données basée sur le
principe “Dernier arrivé, premier sorti” (LIFO). Le dernier élément ajouté à
la pile sera le premier à être récupéré.
Voici quelques fonctions communément utilisées pour manipuler des piles :
— Empiler : ajoute un élément à la pile.
— Dépiler : enlève un élément de la pile et le renvoie.
— La pile est-elle vide ? : renvoie “vrai” si la pile est vide, “faux” sinon.
— La pile est-elle pleine ? : renvoie “vrai” si la pile est pleine, “faux”
sinon.
— Nombre d’éléments dans la pile : renvoie le nombre d’éléments
présents dans la pile.

2 Classe PileChar
Le but est de réaliser une classe Python représentant une pile de carac-
tères. Voici la classe à implémenter :

1
Listing 1 – Classe PileChar en Python
class PileChar :
def __init__ ( s e l f , t a i l l e =50):
s e l f .max = t a i l l e
s e l f . sommet = 0
self . pile = []

def e m p i l e r ( s e l f , c ) :
if s e l f . estPleine ():
r a i s e Ex cep ti on ( " P i l e ␣ p l e i n e ␣ ! " )
s e l f . p i l e . append ( c )
s e l f . sommet += 1

def d e p i l e r ( s e l f ) :
i f s e l f . estVide ( ) :
r a i s e Ex cep ti on ( " P i l e ␣ v i d e ␣ ! " )
s e l f . sommet −= 1
return s e l f . p i l e . pop ( )

def e s t V i d e ( s e l f ) :
return s e l f . sommet == 0

def e s t P l e i n e ( s e l f ) :
return s e l f . sommet == s e l f .max

def t a i l l e ( s e l f ) :
return s e l f .max

def compter ( s e l f ) :
return s e l f . sommet

def a f f i c h e r ( s e l f ) :
print ( f " [ { ’ ’ . j o i n ( s e l f . p i l e ) } ] " )

# Exemple d ’ u t i l i s a t i o n
p i l e = PileChar (5)
p i l e . empiler ( ’a ’ )
p i l e . empiler ( ’b ’ )
p i l e . empiler ( ’ c ’ )
p i l e . a f f i c h e r ( ) # A f f i c h e r a : [ abc ]

2
print ( p i l e . d e p i l e r ( ) ) # A f f i c h e r a : c
p i l e . a f f i c h e r ( ) # A f f i c h e r a : [ ab ]

3 Exercices
Exercice 1 : Implémentation de la méthode afficher
Ajoutez une méthode afficher à la classe PileChar pour afficher les élé-
ments de la pile entre crochets (comme dans l’exemple d’utilisation). Testez
cette méthode en empilant et dépilant des caractères.
Exercice 2 : Gestion d’une pile pleine
Modifiez la méthode empiler pour renvoyer un message d’erreur au lieu de
lever une exception en cas de pile pleine.
Exercice 3 : Comparaison de piles
Surchargez l’opérateur == pour permettre la comparaison de deux piles PileChar.
Deux piles sont égales si elles ont le même contenu et la même taille.
class PileChar :
# ( M thodes p r c d e n t e s . . . )

def __eq__( s e l f , o t h e r ) :
return s e l f . p i l e == o t h e r . p i l e

p i l e 1 = PileChar (5)
p i l e 2 = PileChar (5)
print ( p i l e 1 == p i l e 2 ) # A f f i c h e r a True s i l e s deux p i l e s s o n t gales
Exercice 4 : Copie de pile
En utilisant le module copy, implémentez la fonctionnalité de copie d’une pile
PileChar. Utilisez une copie profonde pour éviter les références partagées
entre les objets.
import copy

p i l e 1 = PileChar (5)
p i l e 2 = copy . deepcopy ( p i l e 1 )
Exercice 5 : Gestion des erreurs
Ajoutez des tests supplémentaires dans vos méthodes pour vérifier les er-
reurs possibles, comme le fait de dépiler une pile vide. Affichez des messages
d’avertissement appropriés.
Exercice 6 : Empilage de chaînes de caractères
Modifiez votre classe pour accepter des chaînes de caractères complètes au

3
lieu de simples caractères. Empilez plusieurs mots et affichez-les dans l’ordre
inverse grâce à la méthode depiler.
Exercice 7 : Pile générique
Modifiez la classe pour qu’elle puisse accepter n’importe quel type d’objet
(entiers, chaînes, objets, etc.). Testez en empilant différents types de données
et en les dépilant.
Exercice 8 : Test de palindrome
Écrivez une fonction qui utilise une pile pour vérifier si une chaîne de carac-
tères est un palindrome (un mot qui se lit de la même façon dans les deux
sens). Utilisez les méthodes empiler et depiler.
def est_palindrome ( mot ) :
p i l e = P i l e C h a r ( len ( mot ) )
for char in mot :
p i l e . e m p i l e r ( char )
mot_inverse = ’ ’ . j o i n ( [ p i l e . d e p i l e r ( ) for _ in range ( len ( mot ) ) ] )
return mot == mot_inverse

mot = " r a d a r "


print ( est_palindrome ( mot ) ) # A f f i c h e r a True s i c ’ e s t un p a l i n d r o m e
Exercice 9 : Simulation de la tour de Hanoï
Créez un programme simulant la tour de Hanoï avec des piles. Vous devrez
manipuler plusieurs piles pour déplacer les disques d’une pile à une autre,
selon les règles du jeu.
Exercice 10 : Représentation graphique de la pile
Imprimez la pile verticalement pour représenter chaque élément sur une nou-
velle ligne. Par exemple :

-----
c
b
a
-----

4 Conclusion
Ce TP vous a permis de manipuler les concepts de la programmation
orientée objet en Python à travers l’implémentation et la gestion d’une struc-
ture de pile. Vous avez exploré plusieurs aspects tels que les méthodes d’une
classe, la gestion des erreurs, la surcharge d’opérateurs et la copie d’objets.

Vous aimerez peut-être aussi