Question 1Que va afficher ce code ?for i in range(2, 6):
print(i)
Boucles for avec range / enumerate / zip
Apprends les boucles for en Python pour parcourir listes, chaînes et dicts et automatiser tes traitements répétitifs.
Jusqu'ici, on a appris le branchement avec if / elif et les vérifications groupées avec all() / any().
Dans cet article, tu vas découvrir l'instruction for pour exécuter le même travail sur chaque élément d'une liste. Avec if et for dans ta boîte à outils, tu peux écrire la plupart du code pratique du quotidien.
Extraire un élément à la fois avec for
Une instruction for prend un objet répétable (un iterable) comme une liste, un tuple, une chaîne ou un dict, et extrait les éléments un par un depuis le début, en associant chacun à la variable que tu nommes et en exécutant ton bloc à chaque fois.
La forme de base est une ligne for variable in iterable: plus un bloc indenté de 4 espaces.
Extraire un élément de la collection → l'affecter à la variable → exécuter le bloc → passer au suivant, en répétant jusqu'à épuisement des éléments.
# Boucler sur une liste
fruits = ["pomme", "banane", "orange"]
for fruit in fruits:
print(fruit)
# Sortie :
# pomme
# banane
# orange
# Les chaînes sont aussi itérables (un caractère à la fois)
for ch in "ABC":
print(ch)
# Affiche A / B / C tour à tour
N'oublie pas le deux-points et l'indentation de 4 espaces
La ligne for doit se terminer par : (un deux-points), et chaque ligne du bloc doit être indentée de 4 espaces (ou une tabulation). Une indentation incohérente lève IndentationError.
Boucler sur un dict avec for
Si tu passes un dict directement à for, seules les clés sont extraites tour à tour. Pour obtenir aussi les valeurs, .items() est le choix habituel. Si tu n'as besoin que des valeurs, utilise .values().
| Forme | Ce que tu obtiens | Usage typique |
|---|---|---|
| for key in d: | clés | Quand la clé seule suffit |
| for value in d.values(): | valeurs | Quand tu n'as besoin que des valeurs pour de l'agrégation |
| for key, value in d.items(): | paires clé/valeur | Quand tu as besoin des deux — pour de l'affichage formaté ou du filtrage |
user = {"name": "alice", "age": 29, "role": "admin"}
# Clés uniquement
for key in user:
print(key)
# name / age / role
# Valeurs uniquement
for value in user.values():
print(value)
# alice / 29 / admin
# Clés et valeurs ensemble
for key, value in user.items():
print(f"{key}: {value}")
# name: alice / age: 29 / role: admin
Répéter un nombre fixe de fois avec range()
range(n) est une fonction intégrée qui retourne la séquence d'entiers de 0 à n-1, et combinée avec for c'est la façon de référence pour écrire des boucles à compteur fixe. Il y a 3 façons courantes de l'appeler.
| Forme | Valeurs générées | Usage |
|---|---|---|
| range(5) | 0, 1, 2, 3, 4 | 0 à n-1 |
| range(2, 8) | 2, 3, 4, 5, 6, 7 | Spécifie début et fin (fin exclue) |
| range(1, 10, 2) | 1, 3, 5, 7, 9 | Spécifie début, fin et pas |
# Boucler de 0 à 4
for i in range(5):
print(i)
# Affiche 0 1 2 3 4 (5 lignes)
# 2 à 7
for i in range(2, 8):
print(i)
# 1 à 9 par pas de 2
for i in range(1, 10, 2):
print(i)
# Utilise _ quand tu n'as besoin que du compteur, pas de la valeur
for _ in range(3):
print("nouvelle tentative...")
Nommer la variable de boucle _ (un underscore) est une convention pour signaler immédiatement « cette variable n'est pas utilisée à l'intérieur ». i ou j fonctionneraient aussi, mais lire du code où ils ne sont jamais utilisés fait s'arrêter le lecteur pour se demander pourquoi — donc utilise _ quand tu ne te soucies que du compteur.
enumerate et zip pour les indices et listes parallèles
Dans le code réel, tu veux souvent la position de chaque élément également, ou bien itérer sur plusieurs listes en parallèle. enumerate() et zip() rendent cela bien plus court et lisible.
enumerate() — boucler avec un indice
Envelopper une liste dans enumerate(list) te donne des paires (indice, élément) tour à tour. C'est pratique pour des affichages de classement ou des numéros de ligne dans des messages d'erreur — partout où tu veux attacher « lequel » à chaque valeur.
products = ["pomme", "pain", "lait"]
for index, name in enumerate(products):
print(f"{index}: {name}")
# 0: pomme
# 1: pain
# 2: lait
# Pour démarrer à 1, passe le départ comme second argument
for rank, name in enumerate(products, 1):
print(f"#{rank}: {name}")
# #1: pomme / #2: pain / #3: lait
zip() — itérer sur plusieurs listes en parallèle
zip(list1, list2, ...) te permet d'extraire les éléments de même indice ensemble depuis plusieurs listes. Il s'arrête quand la liste la plus courte est épuisée, donc c'est sûr même avec des longueurs incompatibles.
names = ["Alice", "Léa", "Camille"]
scores = [82, 91, 65]
for name, score in zip(names, scores):
print(f"{name} : {score} pts")
# Alice : 82 pts / Léa : 91 pts / Camille : 65 pts
Contrôler les boucles avec break et continue
Il est courant de vouloir s'arrêter parce qu'on a trouvé ce qu'on cherchait ou sauter juste cette itération. Le premier utilise break pour quitter la boucle immédiatement ; le second utilise continue pour sauter le reste de cette itération et passer à l'élément suivant.
break met fin à la boucle elle-même, donc les éléments restants ne sont pas évalués du tout. continue saute uniquement le reste de cette itération et passe à l'élément suivant — la boucle dans son ensemble continue. Les deux sont typiquement appelés depuis un if.
# break : s'arrêter dès qu'on trouve la cible
users = ["alice", "léa", "camille", "david"]
for name in users:
if name == "camille":
print("Trouvé")
break
print(f"vérification : {name}")
# vérification : alice / vérification : léa / Trouvé
# continue : sauter les 0 lors d'une somme
scores = [80, 0, 65, 0, 91]
total = 0
for score in scores:
if score == 0:
continue
total += score
print(total) # 80 + 65 + 91 = 236
Dans cet article, on a couvert la vue d'ensemble de for : itérer sur des listes et des dicts, compter avec range(), étendre avec enumerate() / zip(), et contrôler le flux avec break / continue.
Dans le prochain article, on regardera la boucle while — utilisée pour répéter quand on ne connaît pas le compteur à l'avance — et comment éviter les boucles infinies.
Vérification des connaissances
Répondez à chaque question une par une.
Question 2Quand tu déroules enumerate(['a', 'b', 'c'], 1) avec for, quelles paires sont produites ?
Question 3Que va afficher ce code ?nums = [1, 2, 3, 4, 5]
for n in nums:
if n == 3:
continue
print(n)