Les boucles while et for en Python

@joekakone

Joseph Konka @joekakone

03/03/2026 · 11 min

Maîtrisez les structures itératives en Python : la boucle while, la boucle for avec range, enumerate et zip, le contrôle de flux avec break et continue, ainsi que la clause spéciale else sur les boucles.

Les boucles while et for en langage Python#

En programmation, l'automatisation repose sur la capacité d'exécuter un bloc d'instructions à plusieurs reprises. Qu'il s'agisse de traiter des milliers de lignes dans une base de données, d'attendre une saisie utilisateur valide ou de calculer une somme, les boucles sont incontournables.

Python propose deux structures itératives majeures : 1. La boucle conditionnelle while : répète des instructions tant qu'une condition reste vraie. 2. La boucle itérative for : parcourt un à un les éléments d'une séquence ou d'un itérable.


1. La boucle conditionnelle : while#

La boucle while évalue une condition avant chaque tour d'itération. Dès que cette condition devient fausse (False), la boucle s'arrête.

flowchart TD
    A[Condition while vraie ?] -->|Oui| B[Exécuter le corps de la boucle]
    B --> C[Modifier les variables de contrôle]
    C --> A
    A -->|Non| D[Sortir de la boucle]

Exemple 1 : Compte à rebours#

compteur = 5

while compteur > 0:
    print(f"Lancement dans {compteur}...")
    compteur -= 1  # Étape cruciale : modifier la condition d'arrêt !

print("Decollage reussi !")

Exemple 2 : Validation stricte d'une saisie utilisateur#

La boucle while est la structure idéale pour forcer un utilisateur à entrer une valeur conforme :

mot_de_passe = ""

while mot_de_passe != "secret123":
    mot_de_passe = input("Entrez le mot de passe administrateur : ")
    if mot_de_passe != "secret123":
        print("Mot de passe incorrect. Veuillez reessayer.")

print("Authentification reussie !")

[!WARNING] Si vous oubliez de modifier la variable contrôlant la condition à l'intérieur du bloc, vous créerez une boucle infinie qui saturera un cœur de votre processeur. Dans votre terminal, vous pouvez interrompre d'urgence une boucle infinie avec la combinaison de touches Ctrl + C.


2. La boucle de parcours : for#

Contrairement au langage C où la boucle for est un compteur numérique à trois segments (for(int i=0; i<N; i++)), la boucle for de Python est un parcours d'itérable (Foreach). Elle visite directement chaque élément d'une séquence.

Parcourir des séquences existantes#

# 1. Parcourir les caractères d'une chaîne
for lettre in "PYTHON":
    print(lettre, end=" ")
# Affiche : P Y T H O N

print()

# 2. Parcourir une liste d'éléments
langages = ["Python", "SQL", "C", "R"]
for lang in langages:
    print(f"Module de formation : {lang}")

3. L'itérateur numérique : range()#

Pour répéter une action un nombre déterminé de fois ou générer des séquences d'entiers, on utilise l'objet générateur range() :

  • range(stop) : de 0 à stop - 1.
  • range(start, stop) : de start à stop - 1.
  • range(start, stop, step) : de start à stop - 1 avec un pas de step.
# De 0 à 4 (5 itérations au total)
for i in range(5):
    print(i, end=" ")  # 0 1 2 3 4
print()

# De 10 à 25 avec un pas de 5
for i in range(10, 30, 5):
    print(i, end=" ")  # 10 15 20 25
print()

# Compte à rebours de 5 à 1 (pas négatif)
for i in range(5, 0, -1):
    print(i, end=" ")  # 5 4 3 2 1
print()

[!NOTE] range() n'alloue pas tous les nombres en mémoire vive à l'avance. C'est un objet paresseux (lazy) qui produit les valeurs au fur et à mesure, ce qui lui permet de gérer range(10_000_000) instantanément avec une empreinte mémoire quasi-nulle.


4. Les fonctions d'itération avancées : enumerate() et zip()#

Obtenir simultanément l'indice et la valeur avec enumerate()#

Plutôt que de maintenir un compteur manuel ou d'utiliser range(len(liste)) (anti-pattern), utilisez la fonction native enumerate() :

etudiants = ["Alice", "Bob", "Charlie", "Diana"]

for index, nom in enumerate(etudiants, start=1):
    print(f"Rang #{index} : {nom}")

Parcourir plusieurs listes en parallèle avec zip()#

zip() associe les éléments de plusieurs séquences en tuples d'éléments correspondants :

produits = ["Clavier", "Souris", "Ecran"]
prix_ht = [89.90, 45.00, 249.00]

for produit, prix in zip(produits, prix_ht):
    print(f"Article : {produit:<10} | Prix : {prix:>6.2f} EUR")

5. Contrôle de flux : break, continue et la clause else#

Interrompre prématurément avec break#

Le mot-clé break quitte immédiatement la boucle la plus proche sans exécuter les itérations restantes :

# Recherche d'un élément cible
nombres = [14, 28, 42, 59, 84]

for n in nombres:
    if n == 42:
        print("Nombre 42 trouve ! Arret immediat.")
        break
    print(f"Examen de {n}...")

Passer au tour suivant avec continue#

Le mot-clé continue interrompt uniquement l'itération en cours et saute directement à l'itération suivante :

# Afficher uniquement les nombres impairs
for n in range(1, 10):
    if n % 2 == 0:
        continue  # Ignore les nombres pairs
    print(f"Nombre impair : {n}")

La clause spéciale else sur les boucles#

[!TIP] Spécificité exclusive de Python :
Une boucle for ou while peut être suivie d'un bloc else:. Ce bloc est exécuté uniquement si la boucle s'est terminée normalement sans rencontrer de break !
C'est l'idiome parfait pour implémenter des algorithmes de recherche.

nombre_cible = 37

# Test de primalité avec for ... else
for diviseur in range(2, int(nombre_cible ** 0.5) + 1):
    if nombre_cible % diviseur == 0:
        print(f"{nombre_cible} n'est pas premier (divisible par {diviseur}).")
        break
else:
    # Ce bloc s'exécute SEULEMENT si aucun diviseur n'a déclenché le break !
    print(f"{nombre_cible} est bien un nombre premier !")

6. Mise en pratique : Le Jeu du Juste Prix (Guess The Number)#

Concevons un jeu interactif combinant boucles while, conditions, compteurs et interruption :

import random

# Génération d'un nombre secret entre 1 et 100
secret = random.randint(1, 100)
tentatives_max = 7
tentatives_utilisees = 0

print("=== JEU DU JUSTE PRIX (ALGOJUNGLE) ===")
print(f"J'ai choisi un nombre entre 1 et 100. Vous avez {tentatives_max} essais !")

while tentatives_utilisees < tentatives_max:
    tentatives_utilisees += 1
    saisie = input(f"Essai #{tentatives_utilisees} / {tentatives_max} - Votre proposition : ")
    proposition = int(saisie)

    if proposition == secret:
        print(f"\nFELICITATIONS ! Vous avez trouve le juste prix {secret} en {tentatives_utilisees} essai(s) !")
        break
    elif proposition < secret:
        print(">>> C'est PLUS GRAND !")
    else:
        print(">>> C'est PLUS PETIT !")
else:
    print(f"\nDOMMAGE ! Vos {tentatives_max} essais sont epuises.")
    print(f"Le nombre secret etait : {secret}")

7. Défi d'application#

Écrivez un programme qui génère la table de multiplication complète de 1 à 10 sous forme d'un tableau propre à double entrée à l'aide de deux boucles for imbriquées et d'un alignement avec f-strings (f"{produit:>4d}").

Commentaires

Inscrivez-vous à une formation complète

Voir le catalogue