PileCréer une classe Pile qui implémente le type abstrait pile en stockant les données de la pile dans un attribut privé _data de type list.
_data.empiler(élément) ajoute l’élément à la fin de l’attribut _data.dépiler() retire l’élément à la fin de l’attribut _data et le renvoie.est_vide() renvoie True si la pile est vide et False sinon.sommet() renvoie l’élément présent au sommet de la pile, et None si la pile est vide.Voici une série de tests à passer.
pile = Pile()
assert pile.est_vide() is True
pile.empiler(1)
assert pile.est_vide() is False
assert pile.sommet() == 1
pile.empiler(2)
assert pile.est_vide() is False
assert pile.sommet() == 2
assert pile.est_vide() is False
pile.empiler(3)
assert pile.sommet() == 3
assert pile.dépiler() == 3
while not pile.est_vide():
pile.dépiler()
assert pile.est_vide() is True
assert pile.sommet() is None
Pour aller plus loin, modifier la classe Pile afin que sommet() ne soit plus une méthode, mais un attribut sommet. La série de tests précédents devra être modifié en supprimant les parenthèses des appels des méthodes pile.sommet() en pile.sommet.
FileCréer une classe File qui implémente le type abstrait file en stockant les données de la file dans un attribut privé _data de type collections.deque présentée dans le cours et dont vous pouvez consulter la documentation grâce à la fonction help().
_data.enfiler(élément) ajoute l’élément à la tête de l’attribut _data.défiler() retire l’élément de la queue de l’attribut _data et le renvoie.est_vide() renvoie True si la file est vide et False sinon.tête() renvoie l’élément présent à la tête de la file, et None si la file est vide.Voici une série de tests à passer.
file = File()
assert file.est_vide() is True
file.enfiler(1)
assert file.est_vide() is False
assert file.tête() == 1
file.enfiler(2)
assert file.est_vide() is False
assert file.tête() == 1
assert file.est_vide() is False
file.enfiler(3)
assert file.tête() == 1
assert file.est_vide() is False
assert file.défiler() == 1
assert file.défiler() == 2
assert file.défiler() == 3
assert file.est_vide() is True
assert file.tête() is None
Pour aller plus loin, modifier la classe File afin que tête() ne soit plus une méthode, mais un attribut tête. La série de tests précédents devra être modifié en supprimant les parenthèses des appels des méthodes file.tête() en file.tête.
Cet exercice porte sur la notion de pile, de file et sur la programmation de base en Python.
Il est extrait du BAC 2021 Amérique du Nord sujet 1 Exercice 5.
Les interfaces des structures de données abstraites Pile et File sont proposées ci-dessous. On utilisera uniquement les fonctions ci-dessous :
Structure de données abstraite: Pile
Utilise: Élément, Booléen
Opérations:
creer_pile_vide:∅ → Pile
creer_pile_vide() renvoie une pile vide
est_vide:Pile → Booléen
est_vide(pile) renvoie True si pile est vide, False sinon
empiler: Pile,Élément → ∅
empiler(pile,element) ajoute element à la pile pile
depiler: Pile → Élément
depiler(pile) renvoie l’élément au sommet de la pile en le retirant de la pile
Structure de données abstraite: File
Utilise: Élément, Booléen
Opérations:
creer_file_vide: ∅ → File
creer_file_vide() renvoie une file vide
est_vide:File → Booléen
est_vide(file) renvoie True si file est vide, False sinon
enfiler: File, Élément → ∅
enfiler(file,element) ajoute element dans la file file
defiler: File → Élément
defiler(file) renvoie l’élément au sommet de la file file en le retirant de la file file.
On considère la file F suivante :
--------------------------------------
enfilement → "rouge" "vert" "jaune" "rouge" "jaune" → défilement.
--------------------------------------
Quel sera le contenu de la pile P et de la file F après l’exécution du programme Python suivant?
P = creer_pile_vide()
while not(est_vide(F)):
empiler(P, defiler(F))
Créer une fonction taille_file qui prend en paramètre une file F et qui renvoie le nombre d’éléments qu’elle contient. Après appel de cette fonction la file F doit avoir retrouvé son état d’origine.
def taille_file(F):
"""File -> Int"""
Écrire une fonction former_pile qui prend en paramètre une file F et qui renvoie une pile P contenant les mêmes éléments que la file.
Le premier élément sorti de la file devra se trouver au sommet de la pile; le deuxième élément sorti de la file devra se trouver juste en-dessous du sommet, etc.
Exemple: si
--------------------------------------
F = "rouge" "vert" "jaune" "rouge" "jaune"
--------------------------------------
alors l’appel former_pile(F) va renvoyer la pile P ci-dessous :
| "jaune" | -> sommet
| "rouge" |
P = | "jaune" |
| "vert" |
| "rouge" |
-----------
Écrire une fonction nb_elements qui prend en paramètres une file F et un élément elt et qui renvoie le nombre de fois où elt est présent dans la file F. Après appel de cette fonction la file F doit avoir retrouvé son état d’origine.
Écrire une fonction verifier_contenu qui prend en paramètres une file F et trois entiers: nb_rouge, nb_vert et nb_jaune. Cette fonction renvoie le booléen True si “rouge” apparaît au plus nb_rougefois dans la file F, “vert” apparaît au plus nb_vertfois dans la file F et “jaune” apparaît au plus nb_jaune fois dans la file F. Elle renvoie False sinon. On pourra utiliser les fonctions précédentes.