Aller au contenu

TP - Implémenter une Pile

Ce TP doit conduire à créer de A à Z un module utilisable tout le reste de l'année.

Dans le dossier [NSI], créez le dossier intitulé [Mes_modules].

Téléchargez le fichier « à trous » piles.py (clic droit -> [Enregistrer sous]) et enregistrez-le dans ce dossier.

Ce TP a pour but de définir une structure de données implémentant des piles.

Remarque importante

La partie 1 a pour but d'implémenter une structure de pile correspondant à l'interface vue en cours.
La partie 2 va compléter cette implémentation par de nouvelles méthodes, ce qui pourra permettre de modifier l'interface...

Partie 1 - Interface de base

La classe Pile sera munie d'un seul attribut nommé elements. Cet attribut est un tableau dynamique, c'est-à-dire de type list en Python et vide par défaut.

Le sommet de la Pile est le dernier élement du tableau.

important

Les méthodes .append() et .pop() sont autorisées.

Pour la méthode .depiler(), il est demandé de réaliser un test de validité sous forme d'assertion (cf. le plan de test).

Le code à compléter
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class Pile:
    """Implémentation d'une Pile à partir d'un tableau (type list) Python"""

    def __init__(self):
        """
        Initialisation de la Pile
        """
        pass

    def est_vide(self):
        """
        Booléen indiquant si la Pile est vide
        """
        pass

    def empiler(self, element):
        """
        Sortie: None - Place un élément au sommet de la pile.
                Ce sommet est le dernier élément du tableau.
        """
        pass

    def depiler(self):
        """
        Sortie: Valeur du sommet de la pile.
                Ce sommet est dépilé, c'est-à-dire retiré du tableau.
        """
        pass

    def __repr__(self):
        """
        Sortie: str - Chaîne de caractères constituées des éléments
                de la pile, avec des sauts à la ligne, le sommet étant en haut.
        """
        pass

Plan de test

>>> p = Pile()    
>>> p.depiler()
AssertionError: La pile est déjà vide.

>>> p.empiler(7)    
>>> p.empiler(3)    
>>> p.empiler(0)    
>>> p
0
3
7

>>> p.depiler()
0

>>> p
3
7

Vous pourrez tester votre interface en y faisant appel avec les programmes réalisés dans la page d'exercices.

Partie 2 - Interface améliorée

  1. Modifiez l'initialisation de la classe de sorte qu'elle accepte un paramètre supplémentaire de type list afin de « remplir » la pile dès l'initialisation.

    Plan de test

    >>> p1 = Pile([2, 4, 1, 5])        
    >>> p1
    5
    1
    4
    2
    
    >>> p2 = Pile()
    >>> p3 = Pile()        
    >>> p2.empiler(2)        
    >>> p2
    2
    
    >>> p3.empiler(5)        
    >>> p3
    5
    

    Remarque

    Si vous n'obtenez pas les mêmes réponses pour p2 et p3 que dans le plan de test ci-dessus, alors appelez l'enseignant : il vous mettra sur la voie.

  2. Ajoutez une méthode .sommet() qui renvoie la valeur du sommet sans dépiler celui-ci. Un test de validité de cette demande doit être réalisé sous forme d'assertion.

    Plan de test

    >>> p1 = Pile([2, 4, 1, 5])        
    >>> p1.sommet()
    5
    
    >>> p1
    5
    1
    4
    2
    
    >>> p2 = Pile()        
    >>> p2.sommet()
    AssertionError: La pile est vide.
    
  3. Ajoutez une méthode .vider() qui « vide » entièrement la pile.

    Plan de test

    >>> p1 = Pile([2, 4, 1, 5])        
    >>> p1.vider()        
    >>> p1
    
  4. Ajoutez une méthode .hauteur() qui renvoie le nombre d'éléments contenus dans la pile.

    Plan de test

    >>> p1 = Pile([2, 4, 1, 5])        
    >>> p1.hauteur()
    4