S’adapter au contexte: les instructions conditionnelles
Motivation : rôle des structures de contrôle¶
Cependant, on a souvent besoin de rompre cette exécution séquentielle :
Soit pour s’adapter au contexte :


Soit pour répéter des instructions :

Pour cela, nous avons besoin des structures de contrôle. Dans cette feuille, nous allons explorer comment s’adapter au contexte avec les instructions conditionnelles. Ultérieurement, nous verrons comment répéter des instructions.
Instructions conditionnelles¶
Introduction¶
Le principe général est que, en fonction d’une condition, on va exécuter ou non certaines instructions. Voyons cela sur le premier labyrinthe ci-dessus que vous avez déjà croisé :
from laby.global_fr import *
Laby(niveau="3a")Exécutez plusieurs fois la cellule suivante :
debut()
droite()
avance()
gauche()Vous aurez noté qu’une fois la fourmi arrivée à cet endroit du labyrinthe, elle fait, selon les cas, face à une grande toile d’araignée (mortelle!) ou une petite. Elle doit donc agir différemment selon ce contexte.
Si elle fait face à une grande toile d’araignée, elle doit faire demi-tour pour passer par l’autre côté du labyrinthe.
Sinon elle fait face à une petite toile d’araignée qu’elle peut traverser sans danger.
Voilà comment cela peut s’écrire :
Laby(niveau="3a")debut()
droite()
avance()
gauche()
if regarde() == Toile:
gauche()
avance()
avance()
droite()
avance()
avance()
droite()
avance()
gauche()
else:
avance()
avance()
gauche()
avance()
droite()
ouvre()Les instructions conditionnelles¶
Nous allons maintenant introduire formellement les instructions conditionnelles, et tout d’abord spécifier comment regrouper plusieurs instructions ensemble comme ci-dessus (et comme apperçu précédemment avec les fonctions.; cela se fait en Python à l’aide de l’indentation :
Un bloc d'instructions est une suite d’une ou plusieurs instructions à
exécuter successivement. Il est délimité par son indentation (par convention quatre
espaces de plus que le code environnant) ainsi que par un : sur la ligne qui précède :
...:
instruction 1
instruction 2
...
instruction n
...Nous pouvons maintenant définir les instructions conditionnelles simples et alternatives.
if condition:
bloc d instructionsÉvaluation de la condition
Si sa valeur est vraie, exécution du bloc d’instructions
if regarde() == Toile: # Au secours, fuyons!
gauche()
gauche()if condition:
bloc d instructions 1
else:
bloc d instructions 2Évaluation de la condition
Si sa valeur est «Vrai», exécution du bloc d’instructions 1
Si sa valeur est «Faux», exécution du bloc d’instructions 2
if regarde() == Toile: # Au secours, fuyons!
gauche()
gauche()
else: # Tout va bien
avance()Les quatre cellules ci-dessous illustrent le calcul du maximum et du minimum des deux
nombres contenus dans des variables x et y.
x = 3 # Les entrées
y = 5if x > y:
maximum = x
minimum = y
else:
maximum = y
minimum = xminimum3maximum5Testez le code suivant avec plusieurs valeurs de et . Que fait-il ?
a = 10
b = 5if a > b:
print(a)
else:
print(b)10
Solution
Il calcule le maximum entre a et b et l’affiche.
Dans cet exercice, vous allez utiliser la fonction max ci-dessous pour calculer le
maximum de deux nombres, trois nombres et quatre nombres.
def max(a, b):
if a > b:
return a
else:
return bn1 = -2
n2 = 6
n3 = 0
n4 = 7Calculez le max de n1 et n2 (en utilisant la fonction
max) :
### BEGIN SOLUTION
max(n1, n2)
### END SOLUTION6Calculez le max de n1, n2 et n3 Indication: utilisez deux fois la fonction
max.
### BEGIN SOLUTION
max(n1, max(n2, n3))
### END SOLUTION6Calculez le max de n1, n2, n3 et n4 (toujours en utilisant la fonction
max)
### BEGIN SOLUTION
max(n1, max(n2, max(n3, n4)))
### END SOLUTION7Changez les valeurs de n1, n2, n3 et n4 ci-dessus, re-exécutez les cellules et vérifiez les résultats.
Rappel : Les exercices précédés d’un ♣ sont plus difficiles et facultatifs. Il n’est pas nécessaire de les maîtriser pour passer à la suite.
♣ Écrivez une fonction
max4prenant quatre entiers et calculant leur max :
### BEGIN SOLUTION
def max4(a, b, c, d):
return max(a, max(b, max(c, d)))
### END SOLUTION♣ Utilisez votre fonction
max4pour calculer le max den1,n2,n3etn4:
### BEGIN SOLUTION
max4(n1, n2, n3, n4)
### END SOLUTION7Complétez la fonction
minci-dessous. Indication consultez l’exemple de la fonctionmaxplus haut et adaptez le.
def min(a, b):
### BEGIN SOLUTION
if a < b:
return a
else:
return b
### END SOLUTIONEssayez-la sur l’exemple suivant:
min(2, 3)2Essayez-la sur un exemple de votre choix :
### BEGIN SOLUTION
min(6, 0)
### END SOLUTION0Vérifiez que tous les tests qui suivent ont bien la valeur
true:
min(5, 10) == 5Truemin(6, -2) == -2Truemin(-3, -4) == -4Truemin(5, min(-3, 8)) == -3TrueLa cellule suivante contient des tests automatisés; nous reviendrons dessus plus en détails par la suite; exécutez la cellule et vérifiez qu’il n’y a pas de message d’erreur.
assert min(5, 10) == 5
assert min(6, -2) == -2
assert min(2, 2) == 2Complétez la fonction
absci-dessous qui calcule la valeur absolue d’un nombre :
def abs(a):
### BEGIN SOLUTION
if a < 0:
return -a
else:
return a
### END SOLUTIONUtilisez cette fonction pour calculer la valeur absolue de
-2.5et vérifiez le résultat :
### BEGIN SOLUTION
abs(-2.5)
### END SOLUTION2.5Vérifiez que les tests qui suivent ont bien la valeur
True:
abs(-5.1) == 5.1Trueabs(2.3) == 2.3Trueabs(-3.4) == 3.4TrueVérifiez que les tests automatisés ci-dessous ne produisent pas d’erreur :
assert abs(0.0) == 0.0
assert abs(2.3) == 2.3
assert abs(-3.4) == 3.4Nous allons maintenant voir comment traiter des contextes avec plus de deux cas.
if condition1:
bloc d instructions 1
elif condition2:
bloc d instructions 2
else:
bloc d instructions 3Le code ci-dessus est strictement équivalent à (mais plus lisible que) :
if condition1:
bloc d instructions 1
else:
if condition2:
bloc d instructions 2
else:
bloc d instructions 3Il peut y avoir autant de clauses elif que nécessaire.
Complétez la fonction frais_de_livraison ci-dessous qui prend en paramètre une distance
en kilomètres et renvoie le montant des frais de livraison en fonction de cette distance
selon les règles suivantes :
Si la distance est inférieure ou égale à 5 km, les frais de livraison sont de 5 €.
Si la distance est comprise entre 5 km (exclus) et 20 km (inclus), les frais de livraison sont de 10 €.
Si la distance est supérieure à 20 km, les frais de livraison sont de 15 €.
def frais_de_livraison(distance):
### BEGIN SOLUTION
if distance <= 5:
return 5
elif distance <= 20:
return 10
else:
return 15
### END SOLUTIONassert frais_de_livraison(3) == 5
assert frais_de_livraison(10) == 10
assert frais_de_livraison(30) == 15Conclusion¶
Dans cette feuille, nous avons vu comment utiliser des instructions conditionnelles simples, alternatives ou filées pour adapter le comportement du programme en fonction du contexte, selon le nombre de cas à traiter.
Avant de passer à la suite, nous vous proposons quelques exercices d’entraînement et de révisions autocorrigés.
import glob, os
from jupylates import Exerciser
os.chdir("../exercices")
Exerciser(glob.glob("conditions/*.md"))