Adloun

Le else qui a changé de patron

Exercice de TD · niveau 2 · sciences numériques et technologie (seconde), chapitre 3 — Instructions conditionnelles · Indentation et conditions imbriquées

Énoncé

Ce programme doit afficher "trop grand" uniquement pour les nombres strictement supérieurs à . Il ne le fait pas.

n = 50
if n > 0:
    if n > 100:
        print("trop grand")
else:
    print("trop grand")
  1. Donner l'affichage pour n = 50, n = 150 et n = -7.
  2. Expliquer l'erreur et corriger.

Corrigé

1. Pour n = 50 : rien. Pour n = 150 : trop grand. Pour n = -7 : trop grand — alors que n'a rien d'un grand nombre.

2. Le else est rattaché au mauvais if. Par son indentation, il est aligné sur if n > 0: : il traite donc le cas des nombres négatifs ou nuls, et non celui des nombres inférieurs à .

Le rattachement se lit uniquement au décalage. Pour obtenir le comportement voulu, la structure entière est d'ailleurs inutile :

n = -7
if n > 100:
    print("trop grand")

La leçon dépasse la correction : le programme fautif ne provoque aucune erreur. Il s'exécute, affiche quelque chose de plausible, et ne se trahit que sur les valeurs négatives. Un test sur un seul jeu de données bien choisi ne l'aurait pas révélé.

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.