File moi ta pile

Comment tester ses fonctions ?

Afin de tester ses fonctions, vous pouvez télécharger les fichiers ci-dessous. Une fois téléchargés, placez-les dans le même dossier que vos fichiers Pile.py et File.py afin qu'ils puissent utiliser vos implémentations de pile et de file.

Vous veillerez également à bien respecter les noms des classes et des méthodes lors de la rédaction des exercices.

Fichier pour tester ses piles

Fichier pour tester ses files

Importer des listes

Pour réaliser cet exercice, vous devez récupérer votre fichier (ou la correction) sur les listes chaînées. Une fois le fichier récupéré, vous devez également le placer dans le même dossier.

Pour importer le fichier (supposons qu'il s'appelle ListeChainee.py et que la classe s'appelle Liste), utilisez ensuite :

1
from ListeChainee import Liste
2
3
ma_liste = Liste()
4
# Ainsi de suite

Question

Implémentez les piles en Python. Votre classe doit se nommer Pile et doit comporter :

  • Une méthode __init__ qui crée une pile vide (correspondant à la primitive creer_pile()).

  • Une méthode est_vide qui indique si la pile est vide ou non.

  • Une méthode empiler qui empile dans la pile la valeur passée en paramètre. Cette méthode doit lever une exception si la valeur n'est pas du même type que les autres valeurs (s'il y en a).

  • Une méthode depiler qui dépile et renvoie la valeur en tête de la pile. Cette méthode doit lever une exception si la pile est vide.

Indice

Une solution possible peut être d'utiliser deux attributs dans notre Pile :

  • self.contenu qui est une Liste, permettant de stocker nos différentes valeurs présentes dans la pile.

  • self.type qui représente le type des éléments dans la pile

Solution

Voici comment débuter votre fichier

1
from ListeChainee import Liste
2
3
class Pile:
4
    """
5
    Une pile permet de stocker des éléments de même type
6
    et de récupérer l'élément ajouté le plus récemment
7
    """
8
9
    def __init__(self):
10
        """
11
        Crée une pile vide (correspond à la primitive creer_pile())
12
        """
13
        self.contenu = Liste()  # Une pile sera stockée dans une liste chaînée.
14
        self.type = None  # Le type de la pile est stocké sous forme de variable.
15
16
    def est_vide(self):
17
        """
18
        Indique si la pile est vide ou non.
19
20
        :return: True si la pile est vide, False sinon.
21
        :rtype: bool
22
        """
23
24
        # TODO : À compléter
25
        pass
26
27
    def empiler(self, valeur):
28
        """
29
        Empile la valeur passée en paramètre dans la pile.
30
        Si la valeur n'est pas du même type que les autres valeurs, lève une exception.
31
32
        :param valeur: Valeur à empiler
33
        """
34
35
        # TODO : À compléter
36
        pass
37
38
    def depiler(self):
39
        """
40
        Dépile et renvoie la valeur en tête de la pile. Si la pile est vide, lève une exception
41
42
        :return: La valeur de la tête de pile
43
        """
44
45
        # TODO : À compléter
46
        pass

Question

Implémentez les files en Python. Votre classe doit se nommer File et doit comporter :

  • Une méthode __init__ qui crée une file vide (correspondant à la primitive creer_file()).

  • Une méthode est_vide qui indique si la file est vide ou non.

  • Une méthode enfiler qui enfile dans la file la valeur passée en paramètre. Cette méthode doit lever une exception si la valeur n'est pas du même type que les autres valeurs (s'il y en a).

  • Une méthode defiler qui défile et renvoie la valeur en tête de la file. Cette méthode doit lever une exception si la file est vide.

Indice

Une solution possible peut être d'utiliser deux attributs dans notre File :

  • self.contenu qui est une Liste, permettant de stocker nos différentes valeurs présentes dans la file.

  • self.type qui représente le type des éléments dans la file

Solution

Voici comment débuter votre fichier

1
from ListeChainee import Liste
2
3
class File:
4
    """
5
    Une file permet de stocker des éléments de même type
6
    et de récupérer l'élément ajouté le moins récemment
7
    """
8
9
    def __init__(self):
10
        """
11
        Crée une file vide (correspond à la primitive creer_file())
12
        """
13
        self.contenu = Liste()  # Une file sera stockée dans une liste chaînée.
14
        self.type = None  # Le type de la file est stocké sous forme de variable.
15
16
    def est_vide(self):
17
        """
18
        Indique si la file est vide ou non.
19
20
        :return: True si la file est vide, False sinon.
21
        :rtype: bool
22
        """
23
24
        # TODO : À compléter
25
        pass
26
27
    def enfiler(self, valeur):
28
        """
29
        Enfile la valeur passée en paramètre dans la file.
30
        Si la valeur n'est pas du même type que les autres valeurs, lève une exception.
31
32
        :param valeur: Valeur à enfiler
33
        """
34
35
        # TODO : À compléter
36
        pass
37
38
    def defiler(self):
39
        """
40
        Défile et renvoie la valeur en tête de la file. Si la file est vide, lève une exception
41
42
        :return: La valeur de la tête de file
43
        """
44
45
        # TODO : À compléter
46
        pass

Question

Rajoutez dans vos classes une méthode voir() qui renvoie la valeur du prochain élément à dépiler ou défiler, mais sans le dépiler ou le défiler. En d'autres termes, cette méthode permet de jeter un coup d'œil à la liste.

Proposez ensuite une méthode dans les fichiers de test, afin de tester vos méthodes.

Question

Pour les plus rapides : Implémenter une file en utilisant deux piles.

Indice

Demandez des cartes à jouer à l'enseignant :)