Les instructions conditionnelles
Objectifs de la section
2-1 Variables, constantes et types
c. Chaînes de caractères
2-2 Traitements de données
b. Algèbre booléenne
2-4 Traitements conditionnels
2-6 Conventions du langage de programmation utilisé
Temps requis
50 minutes
Les variables booléennes et leurs opérateurs booléens
Section 4.1
Une variable booléenne est une variable qui peut prendre deux états : vrai (True
| V) ou faux (False
| F). On utilise très régulièrement ces variables afin de, par exemple, déterminer si une opération doit être exécutée, un certain paramètre a été demandé ... (la réponse est oui ou non).
Syntaxe
Notez la majuscule au début de True
et False
: elle est importante, car Python est sensible à la casse.
Les opérateurs arithmétiques ne s'appliquent pas aux variables booléennes, ils définissent plutôt leurs propres opérateurs. De la même manière qu'un opérateur arithmétique binaire accepte deux nombres et retourne un autre nombre, un opérateur booléen binaire accepte deux booléens et retourne un booléen.
Tables de vérité
On utilise une table de vérité pour représenter le résultat de l'évaluation d'une expression logique. Dans une table de vérité, on présente toutes les combinaisons possibles de valeurs booléennes (vrai ou faux pour chaque variable) et l'on indique ensuite le résultat de l'évaluation.
Exemple - Table de vérité
a | b | a opérateur b |
---|---|---|
F | F | ? |
F | V | ? |
V | F | ? |
V | V | ? |
Opérateur de conjonction (ET)
L'opérateur de conjonction retourne vrai seulement si les deux opérandes sont vrais et faux dans tous les autres cas. On le note en Python par le mot clé and
.
Table de vérité de l'opérateur de conjonction
a | b | a and b |
---|---|---|
F | F | F |
F | V | F |
V | F | F |
V | V | V |
Opérateur de disjonction (OU)
L'opérateur de disjonction retourne vrai dès que l'un ou l'autre des opérandes est vrai et faux seulement si les deux opérandes sont faux. On le note en Python par le mot clé or
.
Le « ou » dans le langage courant
En français, le mot « ou » implique de faire un choix entre deux options, mais souvent on ne peut pas prendre les deux en même temps. En mathématiques et en informatique, cela correspond au « ou exclusif », le « ou » logique qu'on utilise le plus souvent, admet la possibilité que les deux options soient choisies.
Table de vérité de l'opérateur de disjonction
a | b | a or b |
---|---|---|
F | F | F |
F | V | V |
V | F | V |
V | V | V |
Opérateur de négation (NON)
L'opérateur de négation est un opérateur unaire (avec une seule opérande) qui inverse la valeur du booléen. Il retourne vrai seulement si l'opérande et faux, et faux seulement si l'opérande est vrai. On le note en Python par le mot clé not
.
Table de vérité de l'opérateur de conjonction
a | not a |
---|---|
F | V |
V | F |
La priorité des informations
Comme les opérateurs arithmétiques, les opérateurs booléens n'ont pas tous la même priorité. Dans l'ordre :
- Opérateur de négation (
not
) - Opérateur de conjonction (
and
) - Opérateur de disjonction (
or
)
Comme pour l'arithmétique, on peut ajouter des parenthèses pour modifier l'ordre des opérations.
En mathématiques
Il existe une notation mathématique pour exprimer la logique formelle. Voici l'équivalent en termes de notation.
- conjonction : \(\wedge\)
- disjonction : \(\vee\)
- negation : \(\neg\) ou \(\bar{a}\)
Opérateurs de comparaison
Section 4.1
On doit souvent comparer des valeurs entre elles dans un programme afin de permettre d'automatiser des traitements. On utilise les opérateurs de comparaison (aussi appelés relationnels), dont le comportement dépend du type de données. La comparaison de deux nombres ou deux chaînes de caractères ne se fait pas de la même façon. Voici les 6 opérateurs de comparaison en Python.
Opérateur | Symbole | Entre nombres | Entre chaînes | Entre booléens |
---|---|---|---|---|
Égal | == | Si les nombres sont pareils (attention aux float) | Si le contenu des chaînes est pareil (sensible à la casse) | Si les deux valeurs sont les mêmes |
Différent de | != | Si les nombres sont différents (attention aux float) | Si le contenu des chaînes est différent (sensible à la casse) | Si les deux valeurs sont différentes |
Plus petit que | < | Un nombre est plus petit qu'un autre | Compare l'ordre des codes ASCII des caractères de la chaîne | False est plus petit que True |
Plus petit ou égale que | <= | Un nombre est plus petit ou égal à un autre | Compare l'ordre des codes ASCII des caractères de la chaîne | False est plus petit que True |
Plus grand que | > | Un nombre est plus grand qu'un autre | Compare l'ordre des codes ASCII des caractères de la chaîne | True est plus grand que False |
Plus grand ou égal que | >= | Un nombre est plus grand ou égal à un autre | Compare l'ordre des codes ASCII des caractères de la chaîne | True est plus grand que False |
Comparer des types différents
Certaines données peuvent être comparées même si elles ne sont pas dans le même type, d'autres non. La meilleure pratique consiste à convertir d'abord l'une des deux données afin de comparer des données de même type.
La priorité des opérations globale en informatique
On a vu quelques groupes d'opérations qui ont elles aussi une priorité entre eux. Voici donc la priorité globale des opérations en Python.
- Appel de fonction
- Parenthèses
()
- Exposant
**
- Multiplication et division
* / // %
- Addition et soustraction
+ -
- Comparaison
== != < <= > >=
- Négation
not
- Conjonction
and
- Disjonction
or
- Affectation
=
En cas de priorité égale, les instructions s'exécutent de la gauche vers la droite.
Traitement conditionnel
Section 4.2
L'une des caractéristiques les plus importantes des programmes est de réagir de façon différenciée aux différentes entrées. Comme présenté au cours précédent, l'une des caractéristiques des ordinateurs est d'accepter des données, donc il faut pouvoir les considérer dans les traitements effectués.
L'idée de la clause conditionnelle est d'effectuer une vérification sur un booléen et d'effectuer un traitement différent selon la valeur.
graph LR
A[Code...] --> B{Test logique};
B -->|Faux| D[Code...];
B -->|Vrai| C[Traitement conditionnel];
C --> D;
Clause de base
Dans le code python, cela prend la forme d'une condition !#py if
.
L'indentation
Remarquez l'indentation (retrait de la marge de gauche) supplémentaire sous le !#py if
pour la section traitement conditionnel. C'est ce qui permet à Python de savoir quelles instructions sont dans le bloc d'instructions conditionnelles (il peut y avoir plusieurs lignes) et quand celui-ci se termine.
Il y a trois façons de construire des tests logiques pour des expressions conditionnelles :
- Utiliser une variable booléenne;
- Utiliser une expression de comparaison;
- Utiliser une fonction qui retourne un booléen (couvert dans une prochaine section);
Sinon...
Section 4.3
Il arrive que l'on veuille forcer le programme entre deux branches d'exécution possibles.
graph LR
A[Code...] --> B{Test logique};
B --> |Vrai| C[Traitement conditionnel];
B --> |Faux| E[Traitement alternatif];
E --> D[Code...];
C --> D;
Dans ce cas, on utilise la clause else
pour signifier l'autre traitement qui est exécuté lorsque la condition est fausse.
Nombre positif ou non | |
---|---|
Et sinon encore...
Section 4.4
Il arrive qu'on puisse avoir plusieurs scénarios d'exécution possibles qui sont exclusifs entre eux.
graph LR
A[Code...] --> B{Test logique};
B --> C[Traitement conditionnel];
E --> D[Code...];
B --> E[Traitement alternatif 1];
B --> F[Traitement alternatif 2] --> D;
B --> G[Traitement alternatif ...] --> D;
C --> D;
On utilise dans ce cas les clauses elif
(contraction de else if) qui acceptent aussi une condition. Il peut y avoir plusieurs clauses elif
qui s'enchaîne. La première clause dont la condition est évaluée à vraie est exécutée, puis le programme continu. La clause if
est toujours la première et la clause else
, lorsqu'elle est nécessaire, est toujours la dernière.
Nombre positif, négatif ou nul | |
---|---|
Utilisation des opérateurs booléens
Prenons un exemple un peu plus complexe afin d'utiliser les opérateurs booléens dans les conditions et de combiner celles-ci.
On écrit une intelligence artificielle toute simple qui sert à caractériser des animaux à partir de quelques-unes de leurs caractéristiques. Les animaux à identifier sont :
- Le poisson,
- Le serpent,
- Le chat,
- Le poulet,
- La chauve-souris,
- La fourmi,
- Le papillon ou
- L'araignée
Il faut aussi indiquer si l'animal est impossible à déterminer. La base du programme est la suivante.
Exercices
Page 70 et suivantes
Recommandés : 4.1, 4.2, 4.3, 4.8, 4.9, 4.11 Supplémentaires : 4.6, 4.10
Concepts clés de la section
booléen et opérateurs logiques
- les booléens représentent une information qui peut prendre deux états vrai ou faux. On peut combiner plusieurs expressions booléennes par les opérateurs et et ou. On peut aussi inverser un état avec l'opérateur de négation.
comparateur
- vérifie une relation entre deux expressions et retourne une valeur booléenne selon si la relation est vérifiée au non.
instruction conditionnelle
- permet d'exécuter une partie du code seulement lorsqu'une condition est vérifiée. On peut préciser des traitements alternatifs si la situation le requiert.