Les boucles en Python

02 May 2019 02 May 2019 17706 vues ESSADDOUKI Mostafa 10 min de lecture

Boucles — for et while

En Python, les instructions s'exécutent séquentiellement : le programme commence par la première ligne, puis passe à la suivante, et ainsi de suite. Cependant, il est souvent utile de répéter un bloc de code plusieurs fois, par exemple jusqu'à ce qu'une condition soit satisfaite. C'est là que les boucles entrent en jeu.

Définition — Boucle Une boucleest une structure de contrôle qui permet de répéter un bloc d'instructions plusieurs fois. On distingue deux types :
  • Une boucle de comptage (for) : répète un bloc un nombre défini de fois, en parcourant une séquence.
  • Une boucle conditionnelle (while) : répète un bloc tant qu'une condition reste vraie.
  Boucle for Boucle while
Type Comptage / itération Conditionnelle
Quand l'utiliser Nombre d'itérations connu Nombre d'itérations inconnu
Risque Erreur d'indice hors limites Boucle infinie si condition toujours vraie
Exemple typique Parcourir une liste, calculer une factorielle Saisie utilisateur, attente d'un événement

Fonction range()

La fonction intégrée range() génère une séquence de nombres entre une valeur de départ et une valeur d'arrivée. Elle est particulièrement utile pour contrôler le nombre de répétitions dans une boucle for.

Syntaxe
range(fin)                  # de 0 à fin-1
range(début, fin)           # de début à fin-1
range(début, fin, pas)      # de début à fin-1 par pas

Exemple

list(range(5))        # [0, 1, 2, 3, 4]
list(range(2, 5))     # [2, 3, 4]
list(range(0, 10, 2)) # [0, 2, 4, 6, 8]
list(range(5, 0, -1)) # [5, 4, 3, 2, 1]  — décompte
Remarque — Économie mémoire range() ne génère pas réellement une liste en mémoire : elle produit les nombres un par un à la demande (lazy evaluation). Pour obtenir une vraie liste, utilisez list(range(...)).
Appel Séquence générée Description
range(5) 0, 1, 2, 3, 4 5 valeurs à partir de 0
range(2, 6) 2, 3, 4, 5 De 2 à 5 inclus
range(0, 10, 2) 0, 2, 4, 6, 8 Nombres pairs de 0 à 9
range(5, 0, -1) 5, 4, 3, 2, 1 Décompte de 5 à 1
range(1, 10, 3) 1, 4, 7 De 1 à 9 par pas de 3

Boucle for

La boucle for permet d'itérer sur une collection d'éléments, tels que les générateurs (range()), les séquences (listes, tuples, chaînes), ou les structures de données (dictionnaires, ensembles). Elle exécute automatiquement un bloc de code pour chaque élément de la collection.

Syntaxe
for variable in séquence:
    # bloc d'instructions
Fonctionnement À chaque itération, variable prend successivement la valeur de chaque élément de séquence. La boucle s'arrête automatiquement quand tous les éléments ont été parcourus.

Exemple — Calcul de la factorielle

La factorielle d'un entier naturel n (notée n!) est le produit de tous les entiers positifs inférieurs ou égaux à n :

Formule

n! = 1 × 2 × 3 × … × (n−1) × n

n = 5
fact = 1
for i in range(1, n + 1):   # De 1 à n inclus
    fact *= i

print(f"{n}! = {fact}")
Sortie
5! = 120

Exemple — Somme des éléments d'une liste

somme = 0
liste = [1, 2, 6, 8, 9, 10]
for elem in liste:
    somme += elem

print(f"La somme des éléments = {somme}")
Sortie
La somme des éléments = 36
Astuce — Version concise Pour calculer une somme, Python dispose de la fonction intégrée sum() : somme = sum([1, 2, 6, 8, 9, 10]) est équivalent à la boucle ci-dessus. Réservez la boucle for pour les traitements plus complexes.

Exemple — Parcours d'une chaîne

mot = "Python"
for lettre in mot:
    print(lettre, end="-")
# Sortie : P-y-t-h-o-n-

Exemple — Parcours d'un dictionnaire

etudiant = {"nom": "Ismail", "note": 17, "ville": "Meknès"}

for cle, valeur in etudiant.items():
    print(f"{cle} : {valeur}")
Sortie
nom : Ismail
note : 17
ville : Meknès

Boucle while

La boucle while répète un bloc de code tant qu'une condition reste vraie. Dès que la condition devient False, la boucle s'arrête. Elle est utilisée lorsque le nombre d'itérations n'est pas connu à l'avance.

Syntaxe
while condition:
    # bloc d'instructions
    # (penser à modifier la condition pour éviter une boucle infinie)

Exemple — Compteur simple

compteur = 0
while compteur < 3:
    print(f"Compteur = {compteur}")
    compteur += 1   # indispensable pour éviter la boucle infinie
Sortie
Compteur = 0
Compteur = 1
Compteur = 2

Éviter la boucle infinie

Danger — Boucle infinie Si la condition reste toujours vraie, la boucle ne s'arrête jamais. Cela peut saturer la mémoire ou bloquer complètement le programme. Toujours s'assurer qu'une condition de sortie est atteinte.

Trois stratégies pour éviter les boucles infinies :

1. Modifier une variable de contrôle

actif = True
while actif:
    reponse = input("Quitter ? (o/n) ")
    if reponse == "o":
        actif = False   # Met fin à la boucle
Sortie
Quitter ? (o/n) n
Quitter ? (o/n) n
Quitter ? (o/n) o

2. Utiliser break pour sortir

while True:
    nombre = int(input("Entrez un nombre positif pour s'arrêter : "))
    if nombre > 0:
        break   # Sort immédiatement de la boucle
Sortie
Entrez un nombre positif pour s'arrêter : -2
Entrez un nombre positif pour s'arrêter : -1
Entrez un nombre positif pour s'arrêter : 1

3. Utiliser un compteur de garde

tentatives = 0
MAX = 5
while tentatives < MAX:
    mdp = input("Mot de passe : ")
    if mdp == "secret":
        print("Accès accordé")
        break
    tentatives += 1
    print(f"Échec ({tentatives}/{MAX})")
else:
    print("Compte bloqué après 5 tentatives.")
Astuce — Clause else sur une boucle En Python, une boucle while (ou for) peut avoir une clause else : le bloc else s'exécute uniquement si la boucle s'est terminée normalement (sans break). Très utile pour les algorithmes de recherche.

Exemple — Saisie de notes jusqu'à une valeur négative

Demander à un enseignant de saisir des notes d'étudiants jusqu'à ce qu'une valeur négative soit entrée, puis calculer la somme et la moyenne des notes valides.

print("Saisie des notes (valeur négative pour terminer)")

somme_notes = 0.0
nb_notes    = 0
note        = 0.0

while note >= 0:
    note = float(input("Entrez une note : "))
    if note >= 0:
        somme_notes += note
        nb_notes    += 1

if nb_notes > 0:
    print(f"Nombre de notes  : {nb_notes}")
    print(f"Somme des notes  : {somme_notes}")
    print(f"Moyenne          : {somme_notes / nb_notes:.2f}")
else:
    print("Aucune note saisie.")
Sortie
Saisie des notes (valeur négative pour terminer)
Entrez une note : 12
Entrez une note : 13
Entrez une note : 16
Entrez une note : -1
Nombre de notes  : 3
Somme des notes  : 41.0
Moyenne          : 13.67

Boucles imbriquées

Les boucles imbriquées consistent à placer une boucle à l'intérieur d'une autre. Elles permettent de traiter des structures complexes nécessitant des répétitions multi-niveaux :

  • Parcourir des tableaux multidimensionnels (matrices).
  • Générer des motifs ou des pyramides.
  • Produire des combinaisons ou des tables (multiplication, etc.).
Complexité Avec n itérations dans la boucle externe et m dans la boucle interne, le bloc le plus intérieur s'exécute n × m fois. Attention à la complexité pour les grandes valeurs !

Exemple — Générer un motif triangle

Générer le motif :

Motif attendu
*
**
***
****
*****
******
for i in range(1, 7):           # Lignes : 1 à 6
    for j in range(i):          # Colonnes : 0 à i-1
        print("*", end="")
    print()                     # Retour à la ligne
Sortie
*
**
***
****
*****
******

Exemple — Tables de multiplication (1 à 10)

for table in range(1, 11):
    print(f"\n─── Table de {table} ───")
    for multi in range(1, 11):
        print(f"  {table} × {multi:2} = {table * multi:3}")
Sortie (extrait)
─── Table de 1 ───
  1 ×  1 =   1
  1 ×  2 =   2
  ...
─── Table de 10 ───
  10 ×  1 =  10
  10 × 10 = 100

Exemple — Matrice identité 4×4

n = 4
for i in range(n):
    for j in range(n):
        print(1 if i == j else 0, end="  ")
    print()
Sortie
1  0  0  0
0  1  0  0
0  0  1  0
0  0  0  1

Instructions de contrôle de boucle

Python propose trois instructions spéciales pour modifier le déroulement d'une boucle : break, continue et pass.

Instruction break

L'instruction break interrompt immédiatement l'exécution d'une boucle (for ou while), même si la condition de répétition est encore vraie.

Fonctionnement de break
Début boucle
  ├─ condition vraie ?
  │     ├─ OUI → exécuter bloc
  │     │        ├─ break rencontré ? → Sortie immédiate ──►
  │     │        └─ non              → retour au début
  │     └─ NON → fin normale ──►

Exemple — Sortie anticipée

for i in range(5):
    if i == 2:
        break       # Sort dès que i vaut 2
    print(i)
Sortie
0
1

Exemple — Recherche dans une liste

notes = [12, 8, 17, 5, 19, 14]
cible = 17

for i, note in enumerate(notes):
    if note == cible:
        print(f"Note {cible} trouvée à l'indice {i}")
        break
else:
    print(f"Note {cible} introuvable.")
Sortie
Note 17 trouvée à l'indice 2

Instruction continue

L'instruction continue saute le reste du code de l'itération courante et passe immédiatement à l'itération suivante, sans quitter la boucle.

Exemple — Ignorer une valeur

for i in range(5):
    if i == 2:
        print("On saute 2 !")
        continue        # Retourne au début de la boucle
    print(i)
Sortie
0
1
On saute 2 !
3
4

Exemple — Filtrer les notes invalides

notes = [12, -1, 15, 200, 8, 17, -5, 10]

print("Notes valides :")
for note in notes:
    if note < 0 or note > 20:
        print(f"  ✗ {note} ignorée (hors [0, 20])")
        continue
    print(f"  ✓ {note}")
Sortie
Notes valides :
  ✓ 12
  ✗ -1 ignorée (hors [0, 20])
  ✓ 15
  ✗ 200 ignorée (hors [0, 20])
  ✓ 8
  ✓ 17
  ✗ -5 ignorée (hors [0, 20])
  ✓ 10

Instruction pass

L'instruction pass est une instruction vide : elle ne fait rien. Elle sert de corps provisoire pour une boucle ou une fonction non encore implémentée, afin que Python ne lève pas d'erreur de syntaxe.

for i in range(5):
    pass   # À implémenter plus tard

# Utile aussi pour ignorer explicitement certaines valeurs
for note in notes:
    if note < 0:
        pass    # On ne traite pas les notes négatives pour l'instant
    else:
        print(note)

Récapitulatif des instructions de contrôle

Instruction Effet Quitter la boucle ? Usage typique
break Interrompt la boucle immédiatement ✅ Oui Recherche, condition d'arrêt anticipée
continue Saute l'itération courante ❌ Non Filtrer / ignorer certains éléments
pass Ne fait rien (instruction vide) ❌ Non Corps provisoire, placeholder
else S'exécute si la boucle s'est terminée normalement Confirmer l'absence d'un élément après recherche
Sortie
// La sortie apparaîtra ici…
Prêt · Ctrl+Entrée pour exécuter

Discussion (0)

Soyez le premier à laisser un commentaire !

Laisser un commentaire

Votre commentaire sera visible après modération.