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.

Question

En Python, if est suivi




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.

Question

L’expression x == 2




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 à 9

  • La variable n est marquée en rouge

  • Le 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.