Prépa Python

Basique — chapitre 13 sur 54

Les boucles for et while

Itération, break, continue et bonnes pratiques

75 min12 évaluations

Les boucles permettent de répéter un bloc d'instructions — soit un nombre défini de fois, soit tant qu'une condition est vraie. C'est l'un des piliers absolus de la programmation. Python propose deux boucles : for et while.

Pourquoi des boucles ?

Imaginez que vous voulez afficher les nombres de 1 à 10. Sans boucle :

python
print(1)
print(2)
print(3)
# ... 7 lignes de plus
print(10)

Imaginez maintenant jusqu'à 1000. Impraticable. Les boucles résolvent ce problème :

python
for i in range(1, 11):
    print(i, end=" ")

La boucle for

En Python, for ne compte pas comme dans d'autres langages. Il parcourt chaque élément d'une collection.

python
for <variable> in <collection>:
    <instructions>

Parcourir une chaîne

Une chaîne est une séquence de caractères, donc itérable :

python
for lettre in "Python":
    print(lettre)

Parcourir une liste

Une liste est une suite de valeurs entre crochets — le chapitre suivant lui est consacré. for la parcourt de la même façon, élément par élément :

python
fruits = ["pomme", "banane", "cerise"]

for fruit in fruits:
    print(fruit)

Les dictionnaires et les ensembles se parcourent aussi avec for : leurs chapitres montrent comment.

La fonction range()

Pour boucler sur des nombres, on utilise range() qui génère une séquence d'entiers.

Forme Génère
range(n) 0, 1, 2, ..., n-1
range(debut, fin) debut, debut+1, ..., fin-1
range(debut, fin, pas) avec un pas personnalisé
python
# range(5) : de 0 à 4
for i in range(5):
    print(i, end=" ")
python
# range(1, 6) : de 1 à 5
for i in range(1, 6):
    print(i, end=" ")
python
# range(0, 20, 2) : de 0 à 19 par pas de 2
for i in range(0, 20, 2):
    print(i, end=" ")
python
# Pas négatif : décompte
for i in range(10, 0, -1):
    print(i, end=" ")

Exemples d'usage

Calculer une somme :

python
somme = 0
for i in range(1, 101):
    somme += i
print("Somme de 1 à 100 :", somme)

Afficher une table de multiplication :

python
n = 7
for i in range(1, 11):
    print(f"{n} × {i} = {n * i}")

Parcourir une liste avec son indice :

python
fruits = ["pomme", "banane", "cerise"]
for i in range(len(fruits)):
    print(i, ":", fruits[i])

La boucle while

Là où for parcourt une collection, while répète tant qu'une condition est vraie.

python
while <condition>:
    <instructions>

Exemple simple — compter de 1 à 5 :

python
i = 1
while i <= 5:
    print(i, end=" ")
    i += 1

Anatomie :

  1. On initialise i = 1.
  2. On teste la condition i <= 5.
  3. Si vraie, on exécute le bloc.
  4. On modifie i pour progresser (sinon → boucle infinie !).
  5. On retourne à l'étape 2.

Cas typique : saisie utilisateur jusqu'à validation

python
reponse = ""
while reponse not in ("oui", "non"):
    reponse = input("Oui ou non ? ").lower().strip()

print("Vous avez répondu :", reponse)

for vs while : quand choisir ?

Utiliser for quand... Utiliser while quand...
On connaît la collection à parcourir On ne sait pas à l'avance combien d'itérations
On répète un nombre fixe de fois (range) On boucle tant qu'une condition est vraie
Parcours d'une liste, chaîne, dict, set Saisie utilisateur, attente d'un événement

En Python, on utilise for dans ~90 % des cas. while est réservé aux cas où for ne suffit pas.

Les instructions break et continue

Ces deux instructions permettent de contrôler finement l'exécution d'une boucle.

break — sortir de la boucle

break interrompt immédiatement la boucle, même si la condition est encore vraie.

python
# Chercher un élément et sortir dès qu'on le trouve
liste = [3, 7, 12, 25, 8, 14]
cible = 25

for n in liste:
    if n == cible:
        print("Trouvé !")
        break
    print("Ce n'est pas", n)

continue — passer à l'itération suivante

continue saute le reste du bloc et passe directement à l'itération suivante.

python
# Afficher uniquement les nombres pairs
for n in range(1, 11):
    if n % 2 != 0:
        continue      # on saute les impairs
    print(n, end=" ")

Boucles imbriquées

On peut mettre une boucle à l'intérieur d'une autre. Utile pour parcourir des structures à deux dimensions.

python
for i in range(1, 4):
    for j in range(1, 4):
        print(f"{i}×{j}={i*j}", end="  ")
    print()          # retour à la ligne après chaque ligne

Affichage d'un carré d'étoiles

python
taille = 5
for ligne in range(taille):
    for col in range(taille):
        print("*", end=" ")
    print()

for ... range vs boucle sur une collection

Il existe deux écoles pour parcourir une liste. L'école « Python » est largement préférable.

python
fruits = ["pomme", "banane", "cerise"]

# ❌ Style non-Pythonique (mais fonctionnel)
for i in range(len(fruits)):
    print(i, fruits[i])
python
# ✅ Style Pythonique
for i, fruit in enumerate(fruits):
    print(i, fruit)
python
# ✅ Style Pythonique (si on n'a pas besoin de l'indice)
for fruit in fruits:
    print(fruit)

Le TOSA teste les deux styles — sachez reconnaître le second (plus moderne).

La clause else de boucle (bonus utile)

Python a une particularité : on peut mettre un else à la fin d'une boucle. Il s'exécute si la boucle se termine normalement (sans break).

python
# Chercher un nombre premier dans une plage
for n in range(2, 10):
    if n == 7:
        print("Trouvé 7 !")
        break
else:
    print("Pas trouvé")          # ne s'exécute pas ici car on a break

# Version où on ne trouve pas
for n in range(2, 10):
    if n == 99:
        break
else:
    print("99 non trouvé dans la plage")    # s'exécute

Peu utilisé en pratique, mais à connaître pour le TOSA.


Exercices

quiz 01.09.q1réponse unique
Combien de fois s'exécute print("Hello") ?
for i in range(5):
    print("Hello")
quiz 01.09.q2réponse unique
Que vaut i après la boucle ?
for i in range(3):
    pass
quiz 01.09.q3réponse unique
Que s'affiche-t-il ?
for i in range(2, 10, 3):
    print(i, end=" ")
quiz 01.09.q4réponse unique
Que s'affiche-t-il ?
for i in range(5):
    if i == 2:
        break
    print(i)
quiz 01.09.q5réponse unique
Que s'affiche-t-il ?
for i in range(5):
    if i == 2:
        continue
    print(i)
quiz 01.09.q6réponse unique
Combien d'itérations fait cette boucle ?
i = 0
while i < 5:
    i += 2
quiz 01.09.q7réponse unique
Que s'affiche-t-il ?
for lettre in "abc":
    for chiffre in "12":
        print(lettre + chiffre, end=" ")
quiz 01.09.q8réponse unique
Que vaut s après ce code ?
s = 0
for i in range(1, 5):
    s += i

exercice 01.09.x1à faire

Écrivez un programme qui affiche la table de multiplication de n, de 1 à 10.

Exemple pour n = 3 :

text
3 × 1 = 3
3 × 2 = 6
...
3 × 10 = 30

Le signe × peut se taper x ou *.


exercice 01.09.x2à faire

Calculez dans la variable somme la somme de tous les nombres pairs compris entre 1 et limite (inclus).


exercice 01.09.x3à faire

L'ordinateur joue seul à « devinez le nombre » : le nombre mystere est compris entre 1 et 100, et il le cherche par dichotomie.

Tant qu'il n'a pas trouvé, il propose le milieu de l'intervalle, (bas + haut) // 2 :

  • si la proposition est trop petite, l'intervalle devient proposition + 1 … haut ;
  • si elle est trop grande, il devient bas … proposition - 1.

Comptez dans essais le nombre de propositions faites, celle qu'il trouve comprise.


exercice 01.09.x4à faire

Affichez une pyramide d'étoiles de n lignes. Pour n = 5 :

text
*
* *
* * *
* * * *
* * * * *

À retenir