Le tarif du musée, et l'ordre des elif
Exercice de TD · niveau 3 (difficile) · sciences numériques et technologie (seconde), chapitre 3 — Instructions conditionnelles · La structure if / elif / else
Énoncé
Un musée applique ces tarifs : gratuit en dessous de ans, € de à ans, € de à ans, € à partir de ans.
- Écrire une fonction
tarif(age)qui renvoie le prix. - Un élève propose la version ci-dessous. Trouver son défaut et le corriger.
def tarif(age):
if age >= 6:
return 5
elif age >= 18:
return 12
elif age >= 65:
return 8
else:
return 0Corrigé
1.
def tarif(age):
if age < 6:
return 0
elif age <= 17:
return 5
elif age <= 64:
return 12
else:
return 8
print(tarif(4), tarif(10), tarif(30), tarif(70)) # 0 5 12 8
2. Le défaut est l'ordre des tests. La condition age >= 6 est vraie pour tout le monde au-delà de ans : un adulte de ans y répond déjà True et se voit facturer €. Les deux elif suivants ne sont jamais atteints — c'est du code mort.
La règle : quand les conditions sont emboîtées (chacune impliquant la précédente), il faut les écrire de la plus restrictive à la plus large. Ici, en gardant les >=, il faut partir du plus grand âge :
def tarif(age):
if age >= 65:
return 8
elif age >= 18:
return 12
elif age >= 6:
return 5
else:
return 0
Le cas ans révèle le bogue, pas le cas ans : c'est en testant une valeur de chaque tranche qu'on le trouve.
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.