---
title : Activité 2 - Les instructions conditionnelles
author : M. BODDAERT
license : CC-BY-NC-SA
---
# Les instructions conditionnelles

« _Si j'aurais su, j'aurais pas venu_ », réplique du Petit Gibus dans le film "La Guerre des boutons" d'Yves Robert.

## Définition

> Une __instruction conditionnelle__ permet de faire des choix en fonction de la valeur d’une __condition__. On parle souvent d’une instruction _si-alors_, ou _if-else_ en anglais.

En reprenant (et corrigeant) la citation du Petit Gibus, l'instruction conditionnelle devient « _Si j'avais su alors je ne serais pas venu_ ».

> Une __condition__ est une instruction qui est soit vraie, soit fausse. On parle alors d’une _instruction booléenne_ ou _variable booléenne_.

Par exemple, si une variable `note_francais` vaut 5 et qu’une variable `note_anglais` vaut 10 alors la condition `note_francais < note_anglais` est une condition qui est vraie, tandis que les conditions `note_francais > note_anglais` et `note_francais == note_anglais` sont fausses.

## Comparaisons de variables

Les opérateurs de comparaisons sont :

- `<` : inférieur
- `<=` : inférieur ou égal
- `>`: supérieur
- `>=`: supérieur ou égal
- `==` : est égal à
- `!=`: est différents de

Le résultat d'une comparaison est toujours un booléen

- `True` si la comparaison est vraie
- `False` si la comparaison est Fausse

Remarque : on ne peut comparer que des objets comparables

Attention, le test d'égalité entre deux variables se fait avec un double égal `==` (car le simple `=` permet d'affecter une valeur à une variable, Cf. [Activité 1](../activite_1/README.md)).

### À faire

Commenter chaque instruction ci-dessous

```python
a = 5
b = 18 
c = 12.3
mot1 = "Hello"
mot2 = "World"
#
print(a > b)
#
print(b // a == 3)
#
print(b % a == 3)
#
print(a - b > 2)
#
print(type(c) == float)
#
print(mot1 != mot2)
#
print(mot1 < mot2)
#
print(mot1 > 2)
```

## Description

Dans une suite d'instructions on est souvent amené à faire des choix.

### Cas 1 : Si...Alors

**Si** une ou plusieurs conditions sont réalisées **Alors** on exécute une ou plusieurs instructions

La structure en Python : On indente (une tabulation) les instructions qui doivent s'exécuter si la condition est vérifiée

```
if condition :
    instruction1
    instruction2
```

Exemple qui affiche si les variables `a` et `b` sont des entiers pairs

```python
a = 12
if a % 2 == 0:
    print(a, " est un entier pair")
    
b = 13
if b % 2 == 0:
    print(b," est un entier pair")
```

### Cas 2 : Si ...Alors...Sinon

Dans cette structure, si la ou les conditions sont vraies, les instructions 1 et 2 sont exécutées. Sinon c'est l'instruction3 qui est exécutée.

```
    if condition:
        instruction1
        instruction2
    else:
        instruction3
```

Exemple :

```python
a = 12

if a % 2 == 0:
    print(a, " est un entier pair")
else:
    print(a," est un entier impair")
```

### Cas 3 : Si...Alors...Sinon Si

Dans cette structure on teste plusieurs conditions

```
    if condition1:
        instruction1
    elif condition2:
        instruction2
        instruction3
    elif condition3:
        instruction4
    else:
        instruction5
```

Exemple :

Imaginons les conditions de passage d'un piéton en fonction du feu de signalisation et du nombre de voitures passantes :

```python
if feu == 'VERT':
	print('Piéton, vous pouvez passer')
elif voitures = 0 :
  print('Piéton, vous pouvez passer mais attention')
else:
	print('Piéton, vous ne pouvez passer')
```

### À Faire

Soit l'algorithme qui détermine la réponse de Yoda en fonction de la taille qui lui est communiquée :

```txt
	Demander la taille
	Si la taille est supérieure à 1m80 alors
		la réponse est 'Maître, vous vous prenez pour Chewbacca'
  Sinon si la taille est supérieure à 1m20 alors
    la réponse est 'Maitre, vous vous prenez pour Luc Skywalker'
  Sinon si la taille est supérieure à 0.80m alors
    la réponse est "Maitre, ce n'est pas la taille qui compte"
  Sinon la réponse est 'Maitre, vous vous sous-estimez'
```

Compléter le code suivant pour qu'il implante l'algorithme ci-dessus :

```python
taille = input('Combien mesures-tu ?')
taille = float(taille)
if taille > 1.8 :
   reponse = ???
elif taille > 1.2 :
   reponse = ???
elif taille > 0.8 :
   reponse = ???
else :
   reponse = ???
print(reponse)
```

## Exercices

### Exercice 1

Modifier le code suivant pour qu'il y ait 4 couleurs différentes en fonction de la position(abscisse) de la souris

**mouseX** renvoie l'abscisse de la souris (0 pour le coin supérieur gauche de la fenêtre)

( 0 à 50 , 50 à 100, 100 à 150 et 150 à 200)

```python
from p5 import *

def setup():
    createCanvas(200,200) # crée une fenêtre de 200 x 200 pixels

def draw():# cette fonction s'exécute  en boucle 60 fois par seconde...
    # les conditions pour la couleur du fond d'écran
    if mouseX > 0 and mouseX < 100: # teste la position (abscisse) de la souris sur la moité gauche (0 à 100)
        background(255,120,0) # 
    elif mouseX > 100 and mouseX < 200:# teste la position (abscisse) de la souris sur la moité droite (100 à 200)
        background(0,255,120) #
    else:
        background(0,0,255) # fond bleu
run()
```

### Exercice 2

Reprendre le code précédent(copier-coller) et en utilisant les instructions **mouseX** et **mouseY** (qui renvoie abscisse et ordonnée de la souris), faites en sorte qu'il y ait 4 couleurs différentes qui s'affichent suivant la position de la souris dans les quadrants:

- 0 < mouseX <100 et 0 < mouseY < 100, la couleur affichée doit être le bleu
- 100 < mouseX < 200 et 0 < mouseY < 100, la couleur affichée doit être le vert
- 0 < mouseX < 100 et 100 < mouseY < 200, la couleur affichée doit être le rouge
- 100 < mouseX < 200 et 100 < mouseY < 200, la couleur affichée doit être le jaune

### Exercice 3

Dans le code suivant on affiche dans la fenêtre 4 cercles et la couleur de fond change si la souris survole l'un des cercles.

- l'instruction **circle(50,50,40)** dessine un cercle de centre (50,50 ) et de diamètre 40.
- l'instruction **dist(x1,y1,x2,y2)** calcule la distance entre les points de coordonnées (x1,y1) et (x2,y2).
- **dist(mouseX,mouseY,50,50) < 20** teste si la souris est dans l'un des cercles.

Compléter le code de façon que le fond change de couleur au survol des 4 cercles.

```python
from p5 import *

def setup():
    createCanvas(200,200) # crée une fenêtre de 200 x 200 pixels

def draw():# cette fonction s'exécute  en boucle 60 fois par seconde...
    if dist(mouseX,mouseY,50,50) < 20:
        background(255,255,0)
    # à modifier ici
    else:
        background(51,51,51)
    # ne pas modifier...
    fill(0,0,0)
    circle(50,50,40)
    circle(150,150,40)
    circle(150,50,40)
    circle(50,150,40)
    
run()
```

### Exercice 4

Le code ci-dessous montre "une balle" se déplaçant sur un axe horizontal dans une fenêtre en rebondissant sur les bords.

Compléter le code de telle sorte que la balle se déplace aussi dans la verticale en rebondissant sur les bords inférieur et supérieur de la fenêtre.

```python
from p5 import *

def setup():
    global bx,by,vx,vy,r
    r = 20
    bx = 50
    by = 50
    vx = 4
    vy = 5
    createCanvas(400,200) # crée une fenêtre de 200 x 200 pixels

def draw():# cette fonction s'exécute  en boucle 60 fois par seconde...
    global bx,by,vx,vy,r
    background(0,0,0)# fond noir
    # mouvement du cercle sur l'axe horizontal
    bx = bx + vx
    # rebond sur les bords gauche et droit
    if bx < r or bx > 400 - r:
        vx = -vx
    # dessin du cercle
    fill(255,0,0)
    circle(bx,by,2*r)    
    
run()
```

### Exercice 5

Reprendre le code précédent et faire en sorte que la "balle" change de couleur à chaque rebond

Pour utiliser une couleur aléatoire, on pourra utiliser l'instruction: `fill(random(255),random(255),random(255))`
