Quatre boucles, laquelle tourne indéfiniment ?
Exercice de TD · niveau 2 · sciences numériques et technologie (seconde), chapitre 4 — Les boucles · La boucle non bornée : while
Énoncé
Pour chacune de ces boucles, dire si elle se termine et, si oui, ce qu'elle affiche. Corriger celles qui ne se terminent pas.
# (a)
n = 10
while n > 0:
print(n)
# (b)
n = 10
while n > 0:
n = n - 3
print(n)
# (c)
n = 1
while n != 10:
n = n + 3
print(n)
# (d)
n = 5
while n > 0:
n = n - 1
print(n)Corrigé
(a) Boucle infinie. n n'est jamais modifié : la condition reste vraie pour toujours et 10 s'affiche sans fin. Correction : ajouter n = n - 1 dans le bloc.
(b) Se termine, et affiche -2. Les valeurs sont ; le test est faux. Noter que la boucle « saute » par-dessus : la condition n'est pas « atteindre zéro » mais « être encore positif ».
(c) Se termine, mais par chance. n prend les valeurs : elle atteint exactement , s'arrête après tours et affiche 10. Changez la valeur initiale en n = 2 et la suite devient : elle saute par-dessus et la boucle ne s'arrête jamais.
(d) Se termine et affiche 4, 3, 2, 1, 0. Le print étant après la décrémentation, le premier nombre affiché est et non .
La leçon est dans le cas (c) : une condition d'arrêt écrite avec != n'est sûre que si la variable atteint exactement la valeur visée. Avec < ou >, on est protégé du dépassement. C'est la même prudence qu'avec les flottants — mieux vaut un test d'inégalité qu'un test d'égalité.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.