SunuLab
Notre savoir
CoursDébutant13 min de lecture

Les boucles

Répéter sans se répéter : for, range, while, accumulateurs, break et continue

§1.L'ordinateur ne se lasse jamais

C'est là son avantage décisif sur nous. Répéter dix mille fois la même opération sans erreur ni fatigue, c'est exactement ce qu'il sait faire. Les boucles sont l'outil qui te donne accès à cette force.

Python en propose deux, et le choix entre elles est presque toujours évident : le for quand tu SAIS combien de fois répéter, le while quand tu répètes JUSQU'À ce qu'une condition change.

La boucle for
python
for i in range(5):
print("Tour numéro", i)
Résultat : Tour numéro 0 Tour numéro 1 Tour numéro 2 Tour numéro 3 Tour numéro 4

Comme pour le if : deux-points, puis un bloc indenté. La variable i prend successivement chaque valeur produite par range(5), c'est-à-dire 0, 1, 2, 3, 4.

§4.Les trois formes de range

range(n)
De 0 à n − 1.
Exemple. range(4) donne 0, 1, 2, 3.
range(debut, fin)
De debut à fin − 1. La borne de fin est toujours exclue.
Exemple. range(1, 5) donne 1, 2, 3, 4.
range(debut, fin, pas)
Avec un pas, qui peut être négatif pour compter à l'envers.
Exemple. range(0, 10, 2) donne 0, 2, 4, 6, 8. range(5, 0, -1) donne 5, 4, 3, 2, 1.
Apprivoise range
Chargement de l'éditeur Python…

§6.L'accumulateur : le motif à connaître par cœur

La plupart des boucles utiles suivent le même schéma. On crée une variable AVANT la boucle, on la met à jour à chaque tour, et on l'utilise APRÈS. Cette variable s'appelle un accumulateur.

Trois usages reviennent sans cesse : additionner (accumulateur initialisé à 0), multiplier (initialisé à 1), et compter (initialisé à 0, incrémenté sous condition).

La valeur de départ n'est pas arbitraire : 0 pour une somme parce qu'ajouter 0 ne change rien ; 1 pour un produit parce que multiplier par 1 ne change rien.

Les trois accumulateurs
python
# Somme des entiers de 1 à 100
total = 0
for i in range(1, 101):
total += i
print("Somme :", total)
# Factorielle de 6
produit = 1
for i in range(1, 7):
produit *= i
print("6! =", produit)
# Compter les multiples de 3 sous 50
compte = 0
for i in range(50):
if i % 3 == 0:
compte += 1
print("Multiples de 3 :", compte)
Résultat : Somme : 5050 6! = 720 Multiples de 3 : 17

Toujours la même structure : initialiser, mettre à jour dans la boucle, utiliser après. Si tu retiens un seul motif de ce chapitre, que ce soit celui-là.

§9.La boucle while

Le while répète tant qu'une condition reste vraie. On l'emploie quand le nombre de tours n'est pas connu à l'avance : diviser jusqu'à atteindre 1, chercher jusqu'à trouver, redemander jusqu'à obtenir une réponse valide.

Il impose une discipline : quelque chose DANS la boucle doit finir par rendre la condition fausse. Sinon, elle tourne indéfiniment.

while, et le même calcul en for
python
# Combien de fois peut-on diviser 1000 par 2 ?
n = 1000
etapes = 0
while n > 1:
n = n // 2
etapes += 1
print(etapes, "divisions")
# Ici, un for aurait été impossible :
# on ne sait pas d'avance combien d'étapes il faudra.
Résultat : 9 divisions

La variable n change à chaque tour et finit par atteindre 1 : la condition devient fausse, la boucle s'arrête. C'est cette garantie de terminaison qu'il faut vérifier mentalement à chaque while que tu écris.

Une suite qui s'arrête… mystérieusement

La suite de Syracuse : si le nombre est pair on le divise par deux, sinon on le triple et on ajoute un. Personne n'a jamais démontré qu'elle atteint toujours 1, mais elle le fait pour tous les nombres testés à ce jour.

Chargement de l'éditeur Python…

§13.break et continue

break
Sort immédiatement de la boucle, sans finir le tour en cours ni faire les suivants.
Exemple. Dès qu'un diviseur est trouvé, inutile de continuer à chercher : break.
continue
Passe directement au tour suivant, en sautant le reste du bloc.
Exemple. Ignorer les valeurs négatives d'une série sans les traiter.
break : arrêter dès qu'on a trouvé
python
n = 91
diviseur = 0
for d in range(2, n):
if n % d == 0:
diviseur = d
break # inutile de chercher plus loin
if diviseur == 0:
print(n, "est premier")
else:
print(n, "est divisible par", diviseur)
Résultat : 91 est divisible par 7

Sans le break, la boucle continuerait jusqu'à 90 pour rien. Sur de grands nombres, cette différence est énorme. Chercher, c'est savoir s'arrêter quand on a trouvé.

§15.Les boucles imbriquées

Une boucle peut en contenir une autre. La boucle intérieure effectue tous ses tours pour CHAQUE tour de la boucle extérieure : trois tours dehors et quatre dedans font douze passages au total.

C'est ce qu'il faut pour parcourir une grille, produire une table à double entrée, ou comparer tous les couples d'éléments d'une série.

Une table de multiplication complète
python
for i in range(1, 4):
for j in range(1, 4):
print(i, "x", j, "=", i * j)
print("---")
Résultat : 1 x 1 = 1 1 x 2 = 2 1 x 3 = 3 --- 2 x 1 = 2 2 x 2 = 4 2 x 3 = 6 --- 3 x 1 = 3 3 x 2 = 6 3 x 3 = 9 ---

Le print("---") est indenté au niveau de la boucle EXTÉRIEURE : il s'exécute une fois par valeur de i, pas à chaque produit. Ici encore, l'indentation décide de tout.

À retenir

  • for quand on sait combien de tours, while quand on répète jusqu'à ce qu'une condition change.
  • range(n) va de 0 à n − 1 : la borne finale est toujours exclue.
  • Le motif de l'accumulateur : initialiser AVANT, mettre à jour DEDANS, utiliser APRÈS. 0 pour une somme, 1 pour un produit.
  • Dans un while, quelque chose doit faire évoluer la condition — sinon la boucle est infinie.
  • break sort de la boucle, continue saute au tour suivant.
  • Dans des boucles imbriquées, l'intérieure tourne entièrement à chaque tour de l'extérieure.
  • for _ in range(n) quand le compteur ne sert pas.
Mots-clésboucleforrangewhileaccumulateurbreakcontinuecompteur