Adloun

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.

  1. Écrire une fonction tarif(age) qui renvoie le prix.
  2. 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 0

Corrigé

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 &gt;= 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 &gt;=, 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.