La boucle while x!= 1.0
Application directe du cours · niveau 2 · NSI (première), chapitre 2 — Flottants, booléens et textes · Lire, écrire et comparer des flottants
Énoncé
La boucle while x != 1.0: x = x + 0.1 ne s'arrête jamais. (a) Combien de tours fait la variante while x < 1.0 ? (b) Réécrire la boucle pour qu'elle produise exactement les dix valeurs à .
Corrigé
(a) Onze tours, et non dix — un de trop.
>>> x, n = 0.0, 0
>>> while x < 1.0:
... x = x + 0.1
... n = n + 1
>>> n, x
(11, 1.0999999999999999)
Après dix additions, vaut , très légèrement inférieur à : la condition reste vraie, et un onzième tour a lieu. Le test ne boucle pas indéfiniment, mais il compte faux.
(b) La bonne écriture : compter en entiers.
for i in range(10):
x = i / 10
...
range compte sur des entiers, qui sont exacts ; la division n'a lieu qu'au moment de l'usage, et elle n'accumule aucune erreur d'un tour sur l'autre.
Erreur attendue : corriger le != en < et croire le problème réglé. La boucle s'arrête, mais elle fait onze tours : le défaut a changé de visage, il n'a pas disparu. Un compteur de boucle doit être entier.
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.