%% nav-debut : généré par gen_navigation.py, ne pas modifier à la main %%
> [!nav]
> ↩ [[Code et Développement/Programmation/Lecture de Code - Python/Lecture de code - Python|Accueil · Lecture de code - Python]]
>
> | [[Code et Développement/Programmation/Lecture de Code - Python/02_variables_entrees_sorties\|← Variables, entrées, sorties]] | [[Code et Développement/Programmation/Lecture de Code - Python/04_boucle_for\|Boucle `for` →]] |
> |:---|---:|
%% nav-fin %%
# Conditions : `if` / `elif` / `else`
## Structure
```python
if condition:
# exécuté si condition est vraie
elif autre_condition:
# exécuté si la première est fausse et celle-ci vraie
else:
# exécuté si toutes les conditions précédentes sont fausses
```
Un seul bloc est exécuté : le premier dont la condition est vraie.
---
## Opérateurs de comparaison
| Opérateur | Signification |
|---|---|
| `==` | égal |
| `!=` | différent |
| `<` `<=` | inférieur (ou égal) |
| `>` `>=` | supérieur (ou égal) |
| `in` | appartient à |
| `not in` | n'appartient pas à |
---
## Opérateurs logiques
```python
a and b # vrai si a ET b sont vrais
a or b # vrai si a OU b est vrai
not a # inverse la valeur de vérité
```
---
## Exemple — signe d'un nombre
```python
n = int(input()) # entrée : -3
if n > 0:
print("positif")
elif n < 0:
print("négatif")
else:
print("nul")
```
**Trace avec n = -3** :
- `n > 0` → `-3 > 0` → **False** → on passe
- `n < 0` → `-3 < 0` → **True** → on entre
- **Sortie : `négatif`**
---
## Exemple — classification
```python
note = int(input()) # entrée : 14
if note >= 16:
print("Très bien")
elif note >= 14:
print("Bien")
elif note >= 10:
print("Passable")
else:
print("Insuffisant")
```
**Trace avec note = 14** :
- `14 >= 16` → False
- `14 >= 14` → **True** → **Sortie : `Bien`**
---
## Pièges fréquents
- **`=` à la place de `==`** : `if x = 5:` est une erreur de syntaxe. La comparaison s'écrit `==`.
- **`elif` ou plusieurs `if`** : avec `elif`, un seul bloc s'exécute. Avec plusieurs `if` séparés, chaque test est évalué. L'exercice « À vous » en fin de page porte sur ce piège.
- **Priorité de `not`** : `not a or b` se lit `(not a) or b`, pas `not (a or b)`.
- **Indentation** : un `else` doit être aligné avec son `if`. Un décalage d'une espace change complètement le comportement.
---
## Conditions imbriquées
```python
x = int(input()) # entrée : 6
if x % 2 == 0:
if x % 3 == 0:
print("divisible par 6")
else:
print("pair mais pas par 3")
else:
print("impair")
```
**À manipuler :** suivez l'exécution avec x = 6. Le programme passe par les lignes 2 et 3, puis affiche à la ligne 4.
```sq-trace
x = int(input()) # entrée : 6
if x % 2 == 0:
if x % 3 == 0:
print("divisible par 6")
else:
print("pair mais pas par 3")
else:
print("impair")
---
1 | x = 6 |
2 | |
3 | |
4 | | divisible par 6
```
## À vous
**À manipuler :** avec x = 10, prédisez la sortie de chaque programme.
```sq-affiche
x = 10
if x > 0:
print("positif")
elif x > 5:
print("grand")
print("fin")
---
réponse: positif\nfin
explication: avec elif, un seul bloc s'exécute. x > 0 est vrai : le test x > 5 n'est jamais évalué.
```
```sq-affiche
x = 10
if x > 0:
print("positif")
if x > 5:
print("grand")
print("fin")
---
réponse: positif\ngrand\nfin
explication: les deux if sont indépendants. Les deux tests sont vrais, les deux affichages ont lieu.
```
```sq-affiche
a = 4
b = 7
print(a > 3 and b < 5)
print(a > 3 or b < 5)
print(not a > 3)
---
saisie: lignes
réponse: False\nTrue\nFalse
explication: a > 3 vaut True et b < 5 vaut False. and demande les deux, or en demande un, not inverse.
```
%% nav-debut : généré par gen_navigation.py, ne pas modifier à la main %%
> [!nav]
> ↩ [[Code et Développement/Programmation/Lecture de Code - Python/Lecture de code - Python|Accueil · Lecture de code - Python]]
>
> | [[Code et Développement/Programmation/Lecture de Code - Python/02_variables_entrees_sorties\|← Variables, entrées, sorties]] | [[Code et Développement/Programmation/Lecture de Code - Python/04_boucle_for\|Boucle `for` →]] |
> |:---|---:|
%% nav-fin %%