ParcoursOuvrir l'appli

`elif` : plus de deux chemins

Python, les conditions · 40 min

Quand deux chemins ne suffisent pas

Souvent, il y a plus de deux cas. Une mention au bac, par exemple :

Note Mention
16 et plus Très bien
de 14 à 16 Bien
de 12 à 14 Assez bien
de 10 à 12 Passable
moins de 10 Insuffisant

elif est la contraction de else if, « sinon, si » :

if note >= 16:
    mention = "Très bien"
elif note >= 14:
    mention = "Bien"
elif note >= 12:
    mention = "Assez bien"
elif note >= 10:
    mention = "Passable"
else:
    mention = "Insuffisant"

Comment Python lit cette chaîne

Python teste les conditions de haut en bas, et s'arrête à la première qui est vraie. Il exécute son bloc, puis saute tout le reste de la chaîne.

Avec note = 15 :

  1. 15 >= 16 ? Non. On continue.
  2. 15 >= 14 ? Oui. On exécute mention = "Bien", et on saute tout le reste.

C'est pour ça que la deuxième condition n'a pas besoin d'écrire « entre 14 et 16 » : si on arrive jusqu'à elle, on sait déjà que la note est inférieure à 16.

L'ordre des conditions compte

Regarde cette version, où l'on a juste changé l'ordre :

if note >= 10:
    mention = "Passable"
elif note >= 16:
    mention = "Très bien"

Avec note = 18 : 18 >= 10 est vrai, donc mention vaut... "Passable". La ligne « Très bien » n'est jamais atteinte pour une note au-dessus de 10. Aucun message d'erreur : c'est une erreur silencieuse, comme dans la leçon sur les erreurs.

if successifs contre elif

if note >= 10:
    print("Admis")
if note >= 16:
    print("Félicitations")

Ici ce sont deux if indépendants : Python teste les deux. Avec 18, il affiche les deux lignes. Avec elif, il se serait arrêté au premier. Choisis elif quand les cas s'excluent, et des if séparés quand plusieurs peuvent être vrais en même temps.

Pratique : Lis le Zen de Python

Tape import this et lis les 19 principes qui guident la conception de Python. Ils sont en anglais, mais beaucoup sont faciles à comprendre : Beautiful is better than ugly (le beau vaut mieux que le laid), Simple is better than complex, Readability counts (la lisibilité compte).

Un terminal simulé t'attend dans l'appli, sans rien installer. Pratiquer

Exercice : La mention

Range dans mention la mention correspondant à note, selon le tableau de la première étape, puis affiche-la.

Voir une solution
note = 15   # donné

if note >= 16:
    mention = "Très bien"
elif note >= 14:
    mention = "Bien"
elif note >= 12:
    mention = "Assez bien"
elif note >= 10:
    mention = "Passable"
else:
    mention = "Insuffisant"
print(mention)

Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice

Exercice : Répare : la mention qui ment

Ce programme ne plante pas, mais il donne « Passable » à un élève qui a 18. Trouve pourquoi et corrige.

Voir une solution
note = 18   # donné

if note >= 16:
    mention = "Très bien"
elif note >= 14:
    mention = "Bien"
elif note >= 12:
    mention = "Assez bien"
elif note >= 10:
    mention = "Passable"
else:
    mention = "Insuffisant"
print(mention)

Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice

Exercice : Le prix du ticket de bus

Une compagnie de bus applique ces tarifs (inventés pour l'exercice) :

Âge Prix
moins de 5 ans gratuit (0)
de 5 à 17 ans 150 FCFA
60 ans et plus 200 FCFA
les autres 300 FCFA

Range le prix dans prix, puis affiche Prix : ... FCFA.

Voir une solution
age = 30   # donné

if age < 5:
    prix = 0
elif age < 18:
    prix = 150
elif age >= 60:
    prix = 200
else:
    prix = 300
print(f"Prix : {prix} FCFA")

Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice

Exercice : Projet : la facture d'eau par tranches

Beaucoup de factures d'eau ou d'électricité sont calculées par tranches : les premiers mètres cubes sont moins chers que les suivants. Voici un barème inventé pour l'exercice :

  • de 0 à 10 m³ : 300 FCFA par m³ ;
  • au-delà de 10 m³ : 500 FCFA par m³ pour la partie qui dépasse.

Exemple pour 14 m³ : 10 × 300 + 4 × 500 = 3000 + 2000 = 5000 FCFA.

Range le montant dans facture et affiche Facture : ... FCFA.

Voir une solution
conso = 14   # donné : en m³

if conso <= 10:
    facture = conso * 300
else:
    facture = 10 * 300 + (conso - 10) * 500
print(f"Facture : {facture} FCFA")

Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice

Teste-toi

Avec t = 25, qu'affiche ce code ? python if t > 30: print("Chaud") elif t > 20: print("Bon") elif t > 10: print("Frais") else: print("Froid")
  1. Bon (bonne réponse)
  2. Bon puis Frais
  3. Frais
  4. Chaud