13. Décider - if
¶
Dans ce chapitre, nous allons voir comment un programme peut faire des choix, et comment il peut exécuter du code de façon sélective. Nous allons voir que :
le mot-clé
if
permet une exécution conditionnelle,le mot-clé
if-else
permet de choisir entre deux alternatives,le mot-clé
elif
(else if) permet d’ajouter différentes conditions.
13.1. Comparer¶
Un programme doit parfois comparer deux valeurs. Python connait six types de comparaisons :
plus petit (
<
),plus petit ou égal (
<=
),égal (
==
),différent (
!=
),plus grand (
>
),plus grand ou égal (
>=
).
Dans des formules mathématiques nous utilisons les symboles ≤, ≥ et ≠. En Python vous devez utiliser deux symboles: <=
, >=
et !=
à la place.
Exercice 1
Ajoutez des exemples avec les autres 5 comparateurs.
Prudence
Il ne faut pas confondre l’opérateur d’affectation (x = 2
) avec l’opérateur de comparaison (x == 2
).
Le résultat d’une comparaison est une valeur booléenne, soit True
soit False
.
Exercice 2
Que se passe-t-il si vous échangez les deux éléments dans x == 2
?
Et si vous échangez les deux éléments dans x = 2
?
Êtes-vous majeur ?¶
Basé sur votre âge, le programme exécute soit le premier bloc (if
) soit le deuxième bloc (else
). Il affiche si vous êtes majeur ou pas.
Le signe d’un nombre¶
Le mot-clé elif
est une contraction de else if et permet de continuer à tester d’autres conditions.
Trouvez le signe d’un nombre.
Sans le mot-clé elif
nous devrions mettre le bloc if
à l’intérieur du bloc else
en indentation.
Avec multiples conditions, les blocs se décalent de plus en plus et rendent le programme illisible.
Exercice 3
Testez le programme avec -2, 0, 3.
13.2. Visualiser la comparaison¶
Dans l’exemple suivant, nous visualisons le résultat des 6 comparateurs en affichant graphiquement le résultat des 6 comparaisons du type i < n
.
La variable
i
va de -9 à 9La variable
n
est marquée en rougeLe résultat
True
est exprimé avec un grand point,False
avec un petit
Que fait l’expression 'red' if i == n else 'black'
?
Elle renvoie 'red'
si i == n
et 'black'
autrement.
Exercice 4
Modifiez la variable n
et exécutez le code de nouveau.
13.3. Une position aléatoire¶
Dans ce chapitre nous allons prendre des décisions basées sur la position (x, y)
d’un point.
Nous avons donc besoin d’un certain nombre de points, pour ensuite prendre des décisions.
Exercice 5
Les variables w, h
(width, height) représentent largeur et hauteur de la plage rectangulaire des valeurs aléatoires.
Modifiez-les vers 280, 180
et exécutez le code de nouveau.
13.4. Exécution conditionnelle¶
La structure if
ci-dessous permet d’exécuter une action seulement si condition
est True
.
if condition:
action
Dans notre exemple nous affichons un point rouge seulement si x est positif (x > 0
)
Exercice 6
Ajoutez une deuxième condition if
pour colorier un point en lime
si x < -100
.
13.5. La structure if else
¶
La structure if else
ci-dessous permet d’exécuter une action_1 seulement si une condition est vraie et une action_2 autrement
if condition:
action_1
else:
action_2
Dans l’exemple ci-dessous la condition de test est y > 0
.
Si cette condition est vraie, le point est colorié en rouge, autrement en bleu.
13.6. L’opération and
¶
L’opération logique and
permet de connecter deux conditions.
Les deux conditions doivent être vraies pour que l’expression soit vraie.
Pour accélérer le dessin, nous désactivons l’animation avec tracer(0)
.
Pour afficher le résultat, nous devons alors appeler la fonction update()
à la fin.
Exercice 7
Modifiez le code pour que les points aient une couleur différente dans chaque quadrant.
13.7. Région en diagonale¶
Exercice 8
Modifiez le code pour que les points aient 4 couleurs, divisées par les 2 diagonales.
13.8. Dans un cercle¶
Un cercle est défi par une distance donnée d’un point. Le cercle autour de l’origine avec un rayon r est donné par la formule
\( x^2 + y^2 = r^2 \)
Cette formule nous permet de décider si un point aléatoire est à l’intérieur ou à l’extérieur d’un cercle.
La fonction in_circle(p, q, r)
vérifie si le point p
se trouve
à l’intérieur d’un cercle de rayon r
qui se trouve à la position q
.
Exercice 9
Ajoutez un deuxième cercle avec un rayon r=100, colorié en rouge, qui se trouve à la position (100, -50).
13.9. Diagramme de Venne¶
Avec les 3 opérateurs logiques:
and
or
not
nous pouvons trouver des expressions pour trouver les points qui se trouvent dans l’intersection (and
) ou dans l’union (or
) de deux cercles.
Exercice 10
Modifiez le code pour que les points appartenant à l’intersection des deux cercles soient dessinés en jaune.
13.10. Dans un rectangle¶
Dans des programmes interactifs, on doit souvent déterminer si un clic de la souris (x, y) a eu lieu à l’intérieur d’un bouton, qui est normalement une région rectangulaire.
Pour tester si la valeur \(x\) se trouve dans l’intervalle \([x_0, x_1]\) nous devons faire deux comparaisons.
Python permet de remplacer (x0 < x) and (x < x1)
par l’expression plus compacte x0 < x < x1
.
La fonction in_rect(p, x0, x1, y0, y1)
détermine si la position du point p
est à l’intérieur du rectangle indiqué par les coordonnées x0, x1, y0, y1
.
Exercice 11
Ajoutez un deuxième rectangle ou les points ont une autre couleur.
13.11. À gauche d’une droite¶
La fonction is_left(p, q, q2)
est vraie si le point p
se trouve à gauche de la droite définie par les deux points (q, q2).
La fonction in_poly(p, poly)
est vraie si le point p
se trouve à l’intérieur d’un polygone convexe dont les points sont dans l’ordre du sens de l’horloge.