Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

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 :

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.

  1. Si elle fait face à une grande toile d’araignée, elle doit faire demi-tour pour passer par l’autre côté du labyrinthe.

  2. 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 :

Nous pouvons maintenant définir les instructions conditionnelles simples et alternatives.

x = 3  # Les entrées
y = 5
if x > y:
    maximum = x
    minimum = y
else:
    maximum = y
    minimum = x
minimum
3
maximum
5
a = 10
b = 5
if a > b:
    print(a)
else:
    print(b)
10
def max(a, b):
    if a > b:
        return a
    else:
        return b
n1 = -2
n2 = 6
n3 = 0
n4 = 7
### BEGIN SOLUTION
max(n1, n2)
### END SOLUTION
6
### BEGIN SOLUTION
max(n1, max(n2, n3))
### END SOLUTION
6
### BEGIN SOLUTION
max(n1, max(n2, max(n3, n4)))
### END SOLUTION
7

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.

### BEGIN SOLUTION
def max4(a, b, c, d):
    return max(a, max(b, max(c, d)))


### END SOLUTION
### BEGIN SOLUTION
max4(n1, n2, n3, n4)
### END SOLUTION
7
def min(a, b):
    ### BEGIN SOLUTION
    if a < b:
        return a
    else:
        return b
    ### END SOLUTION
min(2, 3)
2
### BEGIN SOLUTION
min(6, 0)
### END SOLUTION
0
min(5, 10) == 5
True
min(6, -2) == -2
True
min(-3, -4) == -4
True
min(5, min(-3, 8)) == -3
True
assert min(5, 10) == 5
assert min(6, -2) == -2
assert min(2, 2) == 2
def abs(a):
    ### BEGIN SOLUTION
    if a < 0:
        return -a
    else:
        return a
    ### END SOLUTION
### BEGIN SOLUTION
abs(-2.5)
### END SOLUTION
2.5
abs(-5.1) == 5.1
True
abs(2.3) == 2.3
True
abs(-3.4) == 3.4
True
assert abs(0.0) == 0.0
assert abs(2.3) == 2.3
assert abs(-3.4) == 3.4

Nous allons maintenant voir comment traiter des contextes avec plus de deux cas.

Il peut y avoir autant de clauses elif que nécessaire.

def frais_de_livraison(distance):
    ### BEGIN SOLUTION
    if distance <= 5:
        return 5
    elif distance <= 20:
        return 10
    else:
        return 15
    ### END SOLUTION
assert frais_de_livraison(3) == 5
assert frais_de_livraison(10) == 10
assert frais_de_livraison(30) == 15

Conclusion

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"))