La barre de chargement bloquée
Tu lances un jeu. La barre de chargement avance, avance, puis elle reste à 99 %. Tu attends une minute. Dix minutes. Rien.
Le programme n'est pas cassé. Il tourne. Mais il tourne pour toujours dans une boucle qui ne se termine jamais.
Dans cette leçon, tu apprends à voir si une boucle va s'arrêter, avant de lancer le programme.
Mots-clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Terminaison | Le fait qu'un algorithme finit toujours par s'arrêter. | Un compte à rebours finit à 0 |
| Boucle infinie | Une boucle qui ne s'arrête jamais. | while True sans sortie |
| Condition d'arrêt | La question qui décide si la boucle continue ou finit. | while n > 0 |
| Variant | Un nombre entier qui change à chaque tour, dans le bon sens, jusqu'à rendre la condition fausse. | n dans un compte à rebours |
| Garde-fou | Un compteur de tours qui arrête de force une boucle trop longue. | if tours > 1000: return -1 |
| Tour | Un passage dans la boucle. | Le tour numéro 3 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
À toi : devine d'abord
À toi de jouer
À toi : devine d'abord
3 questionsTes réponses sont corrigées ici et ne sont pas conservées. Un compte garde tes résultats.
Le nombre qui baisse
Pour être sûr qu'une boucle s'arrête, on cherche un nombre qui change à chaque tour. On l'appelle le variant.
Le variant doit vérifier trois choses. C'est un nombre entier. Il baisse à chaque tour. Et il ne peut pas baisser pour toujours : quand il arrive à une limite, la condition d'arrêt devient fausse.
À toi : un compte à rebours
n = 5
print("Départ :", n)
while n > 0:
n = n - 1
print("Après le tour : n vaut", n)
print("La boucle est finie.")
# Change 5 en 8. Compte les tours : un tour par valeur de n.
Exemple travaillé : le variant n
| Tour | n au début du tour | n > 0 ? | n à la fin du tour |
|---|---|---|---|
| 1 | 5 | oui | 4 |
| 2 | 4 | oui | 3 |
| 3 | 3 | oui | 2 |
| 4 | 2 | oui | 1 |
| 5 | 1 | oui | 0 |
| 6 | 0 | non | La boucle s'arrête |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Les trois questions
Astuce
Devant une boucle, demande-toi : 1. Quel nombre change à chaque tour ? 2. Change-t-il dans le bon sens ? 3. Peut-il atteindre une valeur qui rend la condition fausse ? Trois oui : la boucle s'arrête.
À toi : la ligne oubliée
n = 5
tours = 0
# Garde-fou : on s'arrête de force après 6 tours.
while n > 0 and tours < 6:
print("n vaut", n) # n ne change jamais !
tours = tours + 1
print("On a arrêté la boucle après", tours, "tours.")
# Ajoute dans la boucle la ligne qui manque : n = n - 1.
# Combien de tours fait-elle maintenant ?
Le piège du « différent de »
Voici un piège classique : while n != 0 avec n = n - 3. Si n vaut 9, tout va bien : 9, 6, 3, 0.
Mais si n vaut 10 : 10, 7, 4, 1, puis -2. Le nombre saute par-dessus 0 et ne le touche jamais. La boucle continue sans fin.
Écris n > 0 : cette condition est fausse dès que n passe sous 1.