Python: Les boucles for sur des listes

Une boucle for ne sert pas seulement à répéter N fois la même chose. Sa vraie force, c'est de parcourir une collection d'éléments — une liste de prénoms, de prix, de notes — et de traiter chacun à tour de rôle. C'est ce qu'on apprend ici.

    5gms 5ttr 6ttr 3ttr
  • Exploration

Dans le cours précédent, on a vu for i in range(N) pour répéter N fois la même action. Mais quand chaque tour de boucle traite un élément différent — un prénom, un prix, un nom d'animal — il faut une liste. C'est l'outil de stockage le plus basique de Python, et il marche main dans la main avec for.


🎯 Objectifs

À la fin de ce cours, tu seras capable de :

  1. Créer une liste Python avec les crochets [ ].
  2. Parcourir une liste avec une boucle for.
  3. Appliquer la convention de nommage : nom de la liste au pluriel, variable d'itération au singulier.
  4. Faire varier le traitement dans la boucle (afficher, modifier, conditionner).
  5. Reconnaître qu'une liste peut contenir n'importe quel type de valeurs.

Partie 1 — Le problème : un truc différent à chaque tour

Reprends l'idée du cours précédent. On voulait afficher des prénoms d'élèves :

print("Alice")
print("Bob")
print("Charlie")
print("Diane")
print("Eli")

Avec ce qu'on a vu jusqu'ici (for + range), on ne sait pas faire : for i in range(5) répèterait 5 fois la même ligne. Mais nous, on veut 5 lignes différentes.

Il manque un endroit où stocker les cinq prénoms à l'avance. C'est exactement le rôle d'une liste.


Partie 2 — Créer une liste

Une liste se crée avec des crochets [ ] et des éléments séparés par des virgules :

prenoms = ["Alice", "Bob", "Charlie", "Diane", "Eli"]

Quelques détails à remarquer :

  • Le nom de la variable est au pluriel : prenoms. C'est une convention universelle en Python (et dans la plupart des langages), parce que la variable contient plusieurs valeurs.
  • Chaque élément est entre guillemets : on stocke des chaînes de caractères.
  • L'ordre est conservé : prenoms[0] vaut "Alice", prenoms[1] vaut "Bob", etc.

💡 Vocabulaire : un élément d'une liste s'appelle aussi un item (🇬🇧 item). On dit « parcourir les items » ou « traiter chaque item ».


Partie 3 — Parcourir une liste avec for

C'est ici que tout se met en place. Pour traiter chaque prénom de la liste à tour de rôle :

prenoms = ["Alice", "Bob", "Charlie", "Diane", "Eli"]

for prenom in prenoms:
    print(prenom)

Résultat :

Alice
Bob
Charlie
Diane
Eli

Exactement ce qu'on voulait — et la boucle s'adapte automatiquement au nombre d'éléments. Si tu ajoutes 195 prénoms à la liste, la boucle s'exécute 200 fois sans rien changer d'autre.

La convention de nommage : pluriel / singulier

Regarde bien les deux noms de variables dans la boucle :

for prenom in prenoms:
#   └──┬──┘    └──┬──┘
#  singulier   pluriel
#  (un item)   (la collection)

C'est la convention Python pour les boucles for sur listes. Elle se lit en français naturel :

« Pour chaque prénom dans la liste des prénoms, fais… »

Autres exemples :

Liste (pluriel) Variable de boucle (singulier) Lecture
animaux animal « Pour chaque animal dans animaux »
prix prix_unitaire (ou p) « Pour chaque prix dans prix »
notes note « Pour chaque note dans notes »
eleves eleve « Pour chaque élève dans élèves »
voitures voiture « Pour chaque voiture dans voitures »

🧠 Pourquoi cette convention ? Un lecteur qui découvre ton code doit pouvoir comprendre en deux secondes la nature de chaque variable. for animal in animaux est instantanément clair. for x in liste1 est obscur. Adopte le pluriel/singulier dès le début, c'est gratuit et ça change la lisibilité.


Partie 4 — Que faire dans la boucle ?

À l'intérieur de la boucle, tu peux faire tout ce que tu veux avec l'élément courant. Voici les usages les plus fréquents.

4.1 — Afficher chaque élément

C'est l'exemple qu'on vient de voir :

animaux = ["Chat", "Lapin", "Capibara", "Dragon de Komodo"]

for animal in animaux:
    print(animal)

4.2 — Afficher avec une mise en forme

animaux = ["Chat", "Lapin", "Capibara"]

# On utilise une f-string pour entourer le nom de texte
for animal in animaux:
    print(f"🐾 {animal} a été ajouté au zoo.")

Résultat :

🐾 Chat a été ajouté au zoo.
🐾 Lapin a été ajouté au zoo.
🐾 Capibara a été ajouté au zoo.

4.3 — Transformer chaque élément

prenoms = ["alice", "bob", "charlie"]

# La méthode .upper() met une chaîne en majuscules
for prenom in prenoms:
    print(prenom.upper())

Résultat :

ALICE
BOB
CHARLIE

4.4 — Conditionner le traitement

Tu peux combiner for avec un if pour ne traiter qu'une partie des éléments :

notes = [12, 8, 17, 4, 15, 19, 11]

# On affiche uniquement les notes en échec (< 10)
for note in notes:
    if note < 10:
        print(f"⚠️ Note insuffisante : {note}/20")

Résultat :

⚠️ Note insuffisante : 8/20
⚠️ Note insuffisante : 4/20

💡 Tu remarques ? La boucle parcourt toutes les notes, mais l'if filtre celles qu'on veut afficher. C'est la combinaison la plus utilisée en pratique.


Partie 5 — Une liste peut contenir n'importe quoi

Les listes ne sont pas limitées aux chaînes. Tu peux y mettre des nombres, des booléens, des choses mélangées.

5.1 — Liste de nombres

prix = [2.50, 4.99, 1.20, 8.75, 3.00]

# Affichage formaté
for p in prix:
    print(f"{p:.2f} €")

Résultat :

2.50 €
4.99 €
1.20 €
8.75 €
3.00 €

ℹ️ Le :.2f dans la f-string force 2 chiffres après la virgule. Très pratique pour les montants.

5.2 — Liste de booléens

reponses = [True, False, True, True, False]

for reponse in reponses:
    if reponse:
        print("✔ Correct")
    else:
        print("✗ Faux")

5.3 — Liste hétérogène (à éviter en général)

Python autorise des listes avec des types mélangés :

truc = ["Alice", 17, True, 3.14]

for element in truc:
    print(element)

Ça fonctionne, mais évite-le : une liste qui mélange tout, c'est un signe qu'on aurait dû utiliser une autre structure (un dictionnaire, par exemple — on verra plus tard).

🧠 Bonne pratique : une liste = une collection d'éléments du même type, qui représentent la même chose.


🧪 Exercices

Exercice guidé — Le panier de courses

Énoncé. Tu as la liste des courses à faire :

courses = ["pain", "lait", "œufs", "fromage", "tomates"]

Écris un programme qui affiche :

À acheter :
- pain
- lait
- œufs
- fromage
- tomates

Total : 5 articles

Étape 1 — Identifier ce qu'il faut

Trois choses à faire :

  1. Afficher une ligne d'en-tête (À acheter :).
  2. Parcourir la liste et afficher chaque article précédé d'un -.
  3. Afficher une ligne de total.

Le point 2 est le cœur de la boucle.

Étape 2 — La boucle qui affiche les articles

courses = ["pain", "lait", "œufs", "fromage", "tomates"]

for course in courses:
    print(f"- {course}")

Note le pluriel/singulier : for course in courses.

Résultat à ce stade :

- pain
- lait
- œufs
- fromage
- tomates

Étape 3 — Ajouter l'en-tête et le total

L'en-tête se met avant la boucle, le total après. La fonction len() donne la taille d'une liste.

courses = ["pain", "lait", "œufs", "fromage", "tomates"]

print("À acheter :")

for course in courses:
    print(f"- {course}")

print(f"\nTotal : {len(courses)} articles")

Le \n au début de la dernière f-string ajoute une ligne vide avant le total.

Résultat final :

À acheter :
- pain
- lait
- œufs
- fromage
- tomates

Total : 5 articles

🧠 Le squelette à retenir : en-tête → boucle → bilan. C'est un pattern qu'on retrouve partout (factures, bulletins, statistiques…).

Exercice 2 — Le zoo

Tu as la liste suivante :

animaux = ["Chat", "Lapin", "Capibara", "Lion", "Dragon de Komodo"]

Écris un programme qui affiche pour chaque animal :

🐾 Chat fait partie du zoo. (4 lettres)
🐾 Lapin fait partie du zoo. (5 lettres)
🐾 Capibara fait partie du zoo. (8 lettres)
🐾 Lion fait partie du zoo. (4 lettres)
🐾 Dragon de Komodo fait partie du zoo. (16 lettres)

Indice : len(animal) te donne le nombre de caractères du nom (espaces compris).

Exercice 3 — Notes au-dessus de la moyenne

Pour la liste suivante :

notes = [11, 7, 15, 18, 4, 13, 9, 16]

Affiche uniquement les notes ≥ 10, dans ce format :

✔ 11/20
✔ 15/20
✔ 18/20
✔ 13/20
✔ 16/20

Indice : combine for et un if.

Exercice 4 — Inventaire avec prix

À partir des listes suivantes (qu'on suppose alignées dans le même ordre — produit i ↔ prix i) :

produits = ["Pain", "Lait", "Œufs", "Fromage"]
prix     = [1.50, 1.20, 2.80, 4.99]

Écris un programme qui affiche :

- Pain     : 1.50 €
- Lait     : 1.20 €
- Œufs     : 2.80 €
- Fromage  : 4.99 €

Indice : ici on a deux listes à parcourir en parallèle. Utilise range(len(produits)) et accède aux deux listes par leur index — ou découvre seul la fonction zip() si tu es curieux.


✍️ À retenir

  • Une liste se crée avec [ ] : prenoms = ["Alice", "Bob"].
  • Une boucle for parcourt tous les éléments, un par un, dans l'ordre.
  • Convention de nommage : liste au pluriel (animaux), variable d'itération au singulier (animal).
  • À l'intérieur de la boucle, tu peux afficher, transformer, conditionner — tout ce que tu veux faire avec l'élément courant.
  • La boucle s'adapte automatiquement à la taille de la liste : pas besoin d'écrire combien d'éléments.
  • Une liste peut contenir n'importe quel type, mais par bonne pratique elle contient des éléments de même nature.
  • len(liste) te donne le nombre d'éléments.

Suite

Tu sais maintenant parcourir une liste. Une application directe très fréquente : afficher un menu de sélection à l'utilisateur — par exemple les choix d'un jeu, les rayons d'un magasin, les options d'une appli. C'est l'objet du cours suivant, qui montre la progression menu manuelmenu avec une listemenu numéroté avec enumerate().

Pour aller plus loin