▸ Elle écrit le tout premier algorithme destiné à une machine (jamais construite) de Babbage. Sa « Note G » décrit une suite d'opérations répétée en cycle : en 1843, elle invente la première boucle.
▸ Elle invente la programmation, près d'un siècle avant l'ordinateur : ses notes donnent déjà des exemples qui combinent des variables et des boucles - exactement ce qu'on apprend dans ce cours.
▸ Dès 1804, le métier à tisser de Jacquard enchaîne des cartes cousues en anneau pour répéter un motif. Le mot « boucle » vient de ce ruban refermé sur lui-même.
▸ Jusqu'aux années 1960, un programme = un paquet de cartes en carton. Échappé par terre = tout dans le désordre. Aujourd'hui, range() fait ça sans une miette. 😅
La consigne du prof : « Tu copies cette phrase 5 fois. » La copie de l'élève, en Python, ressemble à ça :
Copier-coller 5 fois, ça passe. Mais si la consigne était 1 000 fois ? Et si la phrase change ? On recopie 1 000 corrections ? Il y a mieux.
On écrit la ligne une seule fois, et la boucle la répète. range(1, 6) fait compter le compteur : 1, 2, 3, 4, 5. La borne de fin (6) n'est pas incluse : on s'arrête juste avant.
Exactement la même sortie à l'écran. À gauche on se répète ; à droite on écrit la ligne une fois et c'est range qui compte les tours. Plus le nombre de répétitions est grand, plus l'écart se creuse.
| On écrit | Le compteur prend | Combien de tours |
|---|---|---|
| range(5) | 0, 1, 2, 3, 4 | 5 |
| range(1, 6) | 1, 2, 3, 4, 5 | 5 |
| range(0, 10, 2) | 0, 2, 4, 6, 8 | 5 |
| range(5, 0, -1) | 5, 4, 3, 2, 1 | 5 |
Deux réflexes Python : sans premier nombre, on part de 0 ; la borne de fin est exclue. Le 3e nombre est le pas (de combien on avance à chaque tour) : négatif, il fait compter à rebours (compte à rebours d'une fusée 🚀).
Le compteur existe dans le bloc : on l'affiche devant le texte pour numéroter. Même technique, deux usages :
La même boucle sert à compter des moutons ou à numéroter une copie : c'est print(compteur, ...) qui place le numéro devant le texte, sans rien recopier.
En boucle, « 1 moutons » est faux. On glisse une condition (Jour 2) DANS la boucle (Jour 3) : si le numéro vaut 1, on écrit « mouton », sinon « moutons ». La boucle décide, à chaque tour, du bon affichage.
À chaque tour, ligne prend la valeur suivante de range, puis le bloc s'exécute. Après 5, plus rien dans range : la boucle s'arrête.
Un accumulateur est une variable qui grossit à chaque tour. Sa valeur de départ ne doit rien fausser : on choisit celle qui ne change rien à l'opération.
+ 0 ne change rien → départ 0× 1 ne change rien → départ 1Le piège : initialiser le produit à 0 donnerait toujours 0 (tout × 0 = 0) ; et une somme partant de 1 serait décalée de 1. La bonne valeur de départ est l'élément neutre de l'opération : 0 pour +, 1 pour ×.
POUR : le nombre de tours est connu d'avance (souvent : la taille des données)
TANT QUE : on répète jusqu'à ce qu'une condition (Jour 2 !) devienne fausse
Même sortie (1 à 5) : à gauche range connaît le nombre de tours ; à droite c'est toi qui fais avancer le compteur et qui dois penser à l'arrêt.
La boucle teste une condition qui change à chaque tour. Impossible de deviner en lisant combien de tours : ça dépend de la température de départ. Dès que temperature > 37 devient faux, on sort.
Un drapeau est une variable bool (Jour 2 !) qui dit « on continue ». Tant qu'il est levé (True), la boucle tourne ; on le baisse (False) pour l'arrêter.
Pratique quand l'arrêt dépend de plusieurs raisons : on baisse le drapeau n'importe où dans le bloc, et la boucle s'arrête au tour suivant.
Un while répète tant que sa condition est vraie. Si rien dans le bloc ne finit par la rendre fausse, la boucle tourne pour toujours et le programme se fige.
Règle d'or du while : à chaque tour, quelque chose doit rapprocher la condition du « faux » - faire avancer le compteur ou finir par baisser le drapeau. Et si un programme s'emballe : Ctrl + C l'arrête.
Le nombre de tours est connu d'avance : il vient le plus souvent des données - 5 lignes, les 30 mesures d'un capteur, les éléments d'une liste.
On répète tant qu'une condition tient. On l'écrit surtout quand le nombre de tours n'est pas connu d'avance : tant que l'usager n'a pas répondu, tant que l'écart dépasse le seuil.
C'est surtout un style d'écriture, pas une loi : on pourrait connaître le nombre de tours et utiliser quand même un while. La vraie question : mes tours dépendent-ils d'une quantité de données (→ pour) ou d'une condition qui évolue (→ tant que) ?
break = quitter la boucle tout de suite (les tours restants sont abandonnés). continue = sauter au tour suivant sans finir le bloc. Les deux marchent avec for comme avec while.
Dans ton calepin, devine la sortie avant d'exécuter :