`elif` : plus de deux chemins
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 :
15 >= 16? Non. On continue.15 >= 14? Oui. On exécutemention = "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")
Bon(bonne réponse)BonpuisFraisFraisChaud