Les structures conditionnelles¶
Les instructions conditionnelles permettent de sélectionner le bloc d'instructions à exécuter selon la valeur d'une expression booléenne.
La structure si ... alors¶
Exemple
Par exemple, si le prix d'entrée dans un musée dépend de l'âge on pourrait avoir la règle:
si l'âge est supérieur à 16 ans alors le prix du billet est 13 €. On a, en français, une structure du type si ...alors .... En Python cela donne:
if age > 16:
prix = 13
De façon plus générale la syntaxe est:
À retenir
if condition:
bloc_instructions_1
bloc_instructions_2
if , ("si" en anglais) , suivie d'une condition puis de :. Le bloc d'instruction qui suit est indenté.
condition est une expression booléenne qui retourne True ou False.
Si condition est évalué à True alors le bloc bloc_instructions_1 e est exécuté, sinon il est ignoré.
Dans tous les cas le bloc bloc_instructions_2 est exécuté.
La structure si ... alors ... sinon ...¶
Exemple
si l'âge est supérieur à 16 ans alors le prix du billet est 13 €.
sinon le billet est gratuit
if age > 16:
prix = 13
else:
prix = 0
Plus généralement, la syntaxe en Python est:
À retenir
if condition:
bloc_instructions_1
else:
bloc_instructions_2
bloc_instructions_3
Où condition a pour valeur True ou False.
- Lorsque
conditiona pour valeurTrue, le blocbloc_instructions_1est exécuté, et le blocbloc_instructions_2est ignoré. - Lorsque
conditiona pour valeurFalse, le blocbloc_instructions_1est ignoré, et le blocbloc_instructions_2est exécuté.
On exécute donc soit le bloc bloc_instructions_1, soit le bloc bloc_instructions_2, mais jamais les 2.
Dans tous les cas, si le bloc bloc_instructions_3 existe, il est exécuté ensuite.
Ne pas oublier le : après le mot clé else.
Structure si ... sinonsi ... sinon¶
Exemple
si l'âge est supérieur à 18 ans alors le prix du billet est 13 €.
sinon si l'âge est supérieur à 16 ans alors le prix du billet est 9 €.
sinon le billet est gratuit
On programme une fonction prix_billet qui qui va calculer le prix du billet en fonction de l'âge.
L'âge doit être positif. On obtient:
def prix_billet(age: int) -> int:
assert age >=0, "L'age doit être positif"
if age >= 18:
prix = 13
elif age >= 16:
prix = 9
else:
prix = 0
return prix
Que l'on peut tester avec le jeu de tests suivant:
assert prix_billet(3) == 0
assert prix_billet(17) == 9
assert prix_billet(18) == 13
assert prix_billet(34) == 13
assert prix_billet(56) == 13
La syntaxe générale en Python est:
À retenir
if condition1:
bloc_instructions_1
elif condition2:
bloc_instructions_2
else:
bloc_instructions_3
bloc_instructions_4
Le mot-clé elif est la contraction de else et de if ce que l'on peut traduire par "sinonsi", il est suivi d'une condition et de : et se poursuit par un bloc indenté. Il peut y avoir plus qu'unelif après un if.
où condition1 a pour valeur True ou False. De même pour condition2.
- Lorsque
condition1a pour valeurTrue, le blocbloc_instructions_1est exécuté, et les blocsbloc_instructions_2etbloc_instructions_3sont ignorés. - Lorsque
condition1a pour valeurFalse:- Le bloc
bloc_instructions_1est ignoré; - Lorsque
condition2a pour valeurTrue, le blocbloc_instructions_2est exécuté et le blocbloc_instructions_3est ignoré; - Lorsque
condition2a pour valeurFalse, le blocbloc_instructions_2est ignoré et le blocbloc_instruction_3est exécuté.
- Le bloc
On exécute donc un seul des blocs soit le bloc bloc_instructions_1, soit le bloc bloc_instructions_2 soit le bloc bloc_instructions_3 mais toujours un seul parmis les 3.
Dans tous les cas, si le bloc bloc_instructions_4 existe, il est exécuté ensuite.
Exemple
On peut maintenant écrire une fonction prix_billet plus complexe suivant les règles:
- Si l'âge est entre 16 et 18 ans (exclus) ou si l'âge est supérieur à 65 le prix est de 9 €.
- Sinon si l'âge est entre 18 ans et 65 ans (exclus) le prix est de 13 €.
- Sinon l'entrée est gratuite.
Cela donne:
def prix_billet(age: int) -> int:
if (age >= 16 and age < 18) or age >= 65:
prix = 9
elif age >= 18 and age < 65:
prix = 13
else:
prix = 0
return prix
Puis effectuer le jeu de tests suivant:
assert prix_billet(3) == 0
assert prix_billet(17) == 9
assert prix_billet(18) == 13
assert prix_billet(34) == 13
assert prix_billet(65) == 9
assert prix_billet(80) == 9
Compréhension fine des expressions booléennes¶
Quelques exemples pour écrire un code élégant et plus compréhensible.
Exemple 1
Voici le code de la fonction est_majeur qui prend en paramètre un âge et renvoie True si l'âge est supérieur ou égal à 18 et False sinon
def est_majeur(age):
if age >= 18:
return True
else:
return False
Ce code est correct mais peut être amélioré ainsi;
def est_majeur(age):
return age >= 18
Explication: L'expression age >= 18 est une expression booléenne qui renvoie True si la variable age est affectée d'une valeur supérieur ou égale à 18 et False sinon.
Exemple 2
Voici le code d'une fonction est_pair qui prend en paramètre un nombre et renvoie True si le nombre est pair (c'est-à-dire si le reste de la division par 2 de ce nombre est 0) et False sinon
def est_pair(n):
if n % 2 == 0:
return True
else:
return False
Ce code est correct mais il peut être amélioré ainsi:
def est_pair(n):
return n % 2 == 0
Explication l'expression booléenne n % 2 == 0 renvoie True si le reste de la division par 2 de n est 0 et False sinon.
On peut aussi l'alléger l'écriture des jeux de tests.
Ce jeu de tests :
assert est_pair(10) == True
assert est_pair(7) == False
assert est_pair(24) == True
assert est_pair(57) == False
Peut s'écrire:
assert est_pair(10)
assert not est_pair(7)
assert est_pair(24)
assert not est_pair(57)