Ctrl+Z et l’imprimante du bureau
Vous tapez un courrier. Vous mettez un mot en gras, puis vous changez sa couleur. Vous appuyez sur Ctrl+Z.
C’est la couleur qui disparaît, pas le gras. La dernière action est annulée en premier.
À l’imprimante du bureau, c’est l’inverse : le premier document envoyé sort en premier. Ces deux règles ont un nom en informatique.
À la fin de cette leçon
Remarque
Je peux choisir une pile ou une file pour un besoin donné.
Mots-clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Pile | le dernier arrivé sort en premier | |
| File | le premier arrivé sort en premier | |
| Sommet | l’élément du dessus d’une pile | |
| Tête | l’élément le plus ancien d’une file | |
| pop | retire un élément d’une liste et le rend | historique.pop() |
| deque | une file rapide fournie par Python | from collections import deque |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Une pile rend le dernier élément arrivé
Pensez à une pile d’assiettes. On pose la nouvelle assiette sur le dessus. On prend aussi celle du dessus.
En Python, une liste fait une très bonne pile. append pose un élément au sommet. pop() retire l’élément du sommet et le rend.
On l’utilise pour annuler des actions, ou pour revenir en arrière dans un navigateur.
À vous : annuler des actions
# L'historique d'un éditeur de texte : chaque action est empilée.
historique = []
historique.append("taper Bonjour")
historique.append("mettre en gras")
historique.append("changer la couleur")
print("Historique :", historique)
# Ctrl+Z : on annule la dernière action, celle du sommet.
annulee = historique.pop()
print("Annulé :", annulee)
print("Reste :", historique)
# Appuyez encore une fois sur Ctrl+Z : ajoutez un deuxième pop.
Exemple travaillé : la pile pas à pas
| Action | Pile après l’action | Élément rendu |
|---|---|---|
| append("taper") | taper | rien |
| append("gras") | taper, gras | rien |
| append("couleur") | taper, gras, couleur | rien |
| pop() | taper, gras | couleur |
| pop() | taper | gras |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Une file sert dans l’ordre d’arrivée
Pensez à la queue au bureau de poste. Le premier arrivé passe en premier. Les nouveaux se mettent au bout.
Une file marche ainsi. On ajoute au bout avec append. On retire la tête avec pop(0).
On l’utilise pour une imprimante, des tickets de support ou des commandes à préparer.
À vous : la file d’impression
# La file d'impression de l'imprimante du deuxième étage.
file_impression = []
file_impression.append("Facture_mars.pdf")
file_impression.append("Planning_equipe.xlsx")
file_impression.append("Contrat_Dupont.docx")
# L'imprimante prend toujours le plus ancien document : la tête.
while len(file_impression) > 0:
document = file_impression.pop(0)
print("Impression de", document)
print("File vide.")
# Ajoutez un quatrième document, puis exécutez.
Une erreur fréquente
Attention
Beaucoup pensent que pop() sans rien entre les parenthèses sert une file. C’est faux : il retire le dernier élément. Pour une file, écrivez pop(0). Sinon le client arrivé en dernier passe avant tout le monde.
Choisir selon l’ordre voulu
Posez-vous une seule question : qui doit sortir en premier ?
Si c’est le plus récent, prenez une pile. Si c’est le plus ancien, prenez une file.
Pour une très longue file, pop(0) devient lent, car tous les éléments reculent. Les développeurs utilisent alors deque, prévu pour cela.
Exemple travaillé : quel choix ?
| Besoin | Qui sort en premier ? | Structure |
|---|---|---|
| Annuler la saisie dans un tableur | La dernière action | Pile |
| Traiter les tickets du support | Le plus ancien ticket | File |
| Bouton Retour du navigateur | La dernière page vue | Pile |
| Préparer les colis du jour | La plus ancienne commande | File |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.