Aller au contenu

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 :

  1. Opérateur de négation (not)
  2. Opérateur de conjonction (and)
  3. 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.

  1. Appel de fonction
  2. Parenthèses ()
  3. Exposant **
  4. Multiplication et division * / // %
  5. Addition et soustraction + -
  6. Comparaison == != < <= > >=
  7. Négation not
  8. Conjonction and
  9. Disjonction or
  10. 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.

Code...

if test_logique :
    # Traitement conditionnel

Code...

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
1
2
3
4
5
6
7
8
9
print("Saisissez un nombre.")
nombre = int(input())

if nombre > 0:
    print("Le nombre est positif.")
else :
    print("Le nombre n'est pas positif.")

print("Fin du programme")

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
print("Saisissez un nombre.")
nombre = int(input())

if nombre > 0:
    print("Le nombre est positif.")
elif nombre < 0 :
    print("Le nombre est négatif.")
else :
    print("Vous avez saisi 0.");

print("Fin du programme")

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.

Programme de base - IA animaux
1
2
3
4
5
6
7
8
9
# Saisie des caractéristiques
print("Combien de pattes possède votre animal ?")
nombre_patte = int(input())

print("Quel est son mode de transport : marche, nage ou vol ?")
mode_transport = input()

# Afficher s'il s'agit d'un poisson, d'un serpent, d'un chat, d'un poulet,
# d'une chauve-souris, d'une fourmi, d'un papillon,  d'une araignée ou s'il est impossible de le déterminer

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.