1. La boucle while
while signifie « tant que ». Le bloc indenté est répété tant que la condition est vraie.
compteur = 1
while compteur <= 5:
print(f"Tour n°{compteur}")
compteur = compteur + 1 # s'écrit aussi : compteur += 1
print("Terminé")
Déroulé : compteur vaut 1, la condition est vraie, on affiche et on passe à 2… Quand compteur vaut 6, la condition devient fausse : on sort de la boucle.
Cas typique : redemander tant que la saisie est incorrecte
note = float(input("Note (0 à 20) : "))
while note < 0 or note > 20:
print("Note invalide.")
note = float(input("Note (0 à 20) : "))
print(f"Note enregistrée : {note}")
2. La boucle for et range()
Quand on sait combien de fois répéter, for est plus simple. range(n) produit les nombres de 0 à n-1.
for i in range(5):
print(i)
→ 0 1 2 3 4 (un par ligne)
| Écriture | Nombres produits | Usage |
|---|---|---|
range(5) | 0, 1, 2, 3, 4 | 5 répétitions |
range(1, 6) | 1, 2, 3, 4, 5 | Début inclus, fin exclue |
range(0, 20, 5) | 0, 5, 10, 15 | Avec un pas de 5 |
range(10, 0, -1) | 10, 9, … , 1 | Compte à rebours |
for sait aussi parcourir un texte, caractère par caractère :
for lettre in "Python":
print(lettre)
3. Compteur et accumulateur
Deux motifs reviennent sans arrêt en programmation :
- le compteur : une variable initialisée à 0 à laquelle on ajoute 1 à chaque fois qu’un événement se produit ;
- l’accumulateur : une variable initialisée à 0 (ou à une valeur neutre) à laquelle on ajoute une valeur à chaque tour, pour calculer un total.
total = 0 # accumulateur
nb_notes = 0 # compteur
for i in range(4):
note = float(input(f"Note {i + 1} : "))
total += note
nb_notes += 1
print(f"Moyenne : {total / nb_notes:.2f}")
4. Contrôler une boucle : break
break interrompt immédiatement la boucle. On l’utilise souvent avec while True, une boucle volontairement infinie dont on sort au bon moment :
while True:
reponse = input("Tape 'q' pour quitter : ")
if reponse == "q":
break
print(f"Tu as tapé : {reponse}")
print("Au revoir !")
Il existe aussi continue, qui passe directement au tour suivant. Utilise ces instructions avec modération : une condition de boucle claire est souvent plus lisible.
5. Le hasard : module random
Python possède des modules : des boîtes à outils prêtes à l’emploi. On les charge avec import.
import random
de = random.randint(1, 6) # entier entre 1 et 6 inclus
print(f"Le dé affiche {de}")
couleur = random.choice(["rouge", "vert", "bleu"])
print(couleur)
6. Boucles imbriquées
Une boucle peut en contenir une autre. La boucle intérieure fait tous ses tours pour chaque tour de la boucle extérieure :
for ligne in range(1, 4):
for colonne in range(1, 4):
print(ligne * colonne, end="\t") # end="\t" : tabulation au lieu d'un retour à la ligne
print() # retour à la ligne
→ 1 2 3
→ 2 4 6
→ 3 6 9
7. Mini-projet : le distributeur de billets en Python
8. Bilan
Exercices corrigés
Les boucles sont la notion où les débutants bloquent le plus. Si ton programme ne fonctionne pas, déroule-le à la main comme au niveau 0, ou utilise le mode pas à pas de Thonny (icône du scarabée, puis F7) pour voir les variables évoluer.
Exercice 3.1 — Échauffement
Voir le corrigé
for i in range(1, 11):
print(f"7 x {i} = {7 * i}")
n = int(input("n ? "))
for i in range(n, -1, -1):
print(i)
print("Décollage !")
for i in range(0, 51, 2):
print(i)
Explication
range(1, 11) va de 1 à 10 car la fin est exclue. Pour le compte à rebours, le pas -1 fait descendre, et la fin -1 permet d’inclure 0. Pour les pairs, le pas de 2 évite même d’avoir à tester la parité.
Pour aller plus loin
# Variante des pairs avec un test (moins efficace, mais utile à comprendre)
for i in range(51):
if i % 2 == 0:
print(i)
Exercice 3.2 — Accumuler
Voir le corrigé
# 1. Somme de 1 à 100
somme = 0
for i in range(1, 101):
somme += i
print(somme)
# 2. Total des achats
total = 0
nb = 0
prix = float(input("Prix (0 pour finir) : "))
while prix != 0:
total += prix
nb += 1
prix = float(input("Prix (0 pour finir) : "))
print(f"{nb} article(s), total : {total:.2f} €")
# 3. Voyelles
mot = input("Un mot : ").lower()
nb_voyelles = 0
for lettre in mot:
if lettre in "aeiouy":
nb_voyelles += 1
print(f"{nb_voyelles} voyelle(s)")
Explication
Les trois exercices utilisent le motif initialiser avant la boucle / mettre à jour dans la boucle / exploiter après la boucle. Dans le 2, la saisie est faite une première fois avant le while, puis à la fin de chaque tour : c’est la structure classique d’une saisie avec valeur d’arrêt (la « sentinelle »).
Pour aller plus loin
# Variante du 2 avec while True et break
total, nb = 0, 0
while True:
prix = float(input("Prix (0 pour finir) : "))
if prix == 0:
break
total += prix
nb += 1
Exercice 3.3 — Le juste prix
Voir le corrigé
import random
secret = random.randint(1, 100)
essais = 0
proposition = 0
while proposition != secret:
proposition = int(input("Ta proposition : "))
essais += 1
if proposition < secret:
print("Plus grand")
elif proposition > secret:
print("Plus petit")
print(f"Gagné en {essais} essais !")
Bonus : en proposant toujours le milieu de l’intervalle restant, on divise les possibilités par 2 à chaque essai : 100 → 50 → 25 → 13 → 7 → 4 → 2 → 1. Sept essais suffisent. C’est la recherche dichotomique.
Explication
proposition est initialisée à 0 (une valeur impossible) pour pouvoir entrer dans la boucle. Le compteur essais augmente à chaque proposition, y compris la bonne.
Pour aller plus loin
# Bonus : limite à 7 essais
import random
secret = random.randint(1, 100)
for essai in range(1, 8):
prop = int(input(f"Essai {essai}/7 : "))
if prop == secret:
print(f"Gagné en {essai} essais !")
break
print("Plus grand" if prop < secret else "Plus petit")
else: # si la boucle n'a pas été interrompue
print(f"Perdu, c'était {secret}")
Le else d’une boucle for est peu connu : il s’exécute seulement si la boucle s’est terminée sans break.
Exercice 3.4 — Dessiner
Voir le corrigé
h = int(input("Hauteur : "))
for i in range(1, h + 1):
print("*" * i)
Explication
La répétition de chaînes "" i évite une boucle imbriquée. La version avec deux boucles est pourtant un bon exercice pour comprendre l’imbrication.
Pour aller plus loin
# Version avec boucles imbriquées
h = int(input("Hauteur : "))
for i in range(1, h + 1):
for j in range(i):
print("*", end="")
print()
# Défi : triangle centré (sapin)
for i in range(1, h + 1):
print(" " * (h - i) + "*" * (2 * i - 1))
Mini-projet
Voir le corrigé
solde = 500
CODE = "1234" # uniquement pour l'exercice
essais = 0
connecte = False
while essais < 3 and not connecte:
if input("Code : ") == CODE:
connecte = True
else:
essais += 1
print(f"Code faux ({3 - essais} essai(s) restant(s))")
if not connecte:
print("Carte avalée.")
else:
while True:
choix = input("1. Solde 2. Retrait 3. Quitter > ")
if choix == "1":
print(f"Solde : {solde} €")
elif choix == "2":
montant = int(input("Montant : "))
if montant <= 0 or montant % 10 != 0:
print("Montant invalide (multiple de 10).")
elif montant > solde:
print("Solde insuffisant.")
else:
solde -= montant
print(f"Retirez vos billets. Nouveau solde : {solde} €")
elif choix == "3":
print("Au revoir.")
break
else:
print("Choix inconnu.")
Explication
Le programme a deux phases : authentification (boucle limitée à 3) puis menu (boucle infinie quittée par break). La constante CODE est écrite en majuscules : c’est la convention Python pour une valeur qui ne change pas.
🧠 Testez vos connaissances
5 questions. Répondez puis cliquez sur « Corriger ». Rien n’est enregistré : c’est de l’auto-évaluation.
© 2026 Bruno Jousseaume. Ce cours est publié sous licence CC BY-NC-SA 4.0 : vous pouvez le partager et l’adapter en citant l’auteur et un lien vers cette page, sans usage commercial, et en partageant vos adaptations sous la même licence.