IV) Booléens, logique et instructions conditionnelles
1) Les expressions et les booléens
Si quelqu'un vous dit que "4 est égal à 5", vous lui répondez quoi ? "c'est faux". Si maintenant la même personne vous dit que "7 est égal à 7", vous lui répondrez bien évidemment que "c'est vrai".
En Python, ces deux "affirmations" ("4 est égal à 5" et "7 est égal à 7") s'écriront 4 == 5 et 7 == 7 (notez bien le double signe égal).
4 == 5 est appelé une expression, une expression est soit vraie (True comme 7 == 7), soit fausse (False comme 4 == 5).
Pour l'instant nous avons vu deux grands types de données : les nombres (entier ou flottant) et les chaînes de caractères, il existe un troisième type tout aussi important que les deux premiers : les booléens. Un booléen est un type de données qui ne peut prendre que deux valeurs : vrai (True) ou faux (False).
Une expression est soit True, soit False.
ATTENTION : notez le double égal "==" qui permet de distinguer une expression et une affectation (association d'une valeur à un nom (variable)). Le fait de confondre le "simple égal" et le "double égal" est une erreur classique qu'il faut éviter.
Il est possible d'utiliser des variables dans une expression, par exemple avec :
on auraa == b qui sera False.
-
A la place de l'opérateur "==" il est possible d'utiliser l'opérateur "!=" qui signifie "différent de".
-
Par exemple "7 != 7" est
Falsealors que5 != 4estTrue. -
Pour résumer :
| Opérateurs | Symboles | Exemples | Résultat |
|---|---|---|---|
| égal | == | 3 == 5 | False |
| différent | != | 3 != 5 | True |
| strictement inférieur à | < | 5 < 7 | True |
| inférieur ou égal à | <= | 5 <= 7 | True |
| strictement supérieur à | > | 9 > 9 | False |
| supérieur ou égal à | >= | 9 >= 9 | True |
2) Les opérateurs "or", le "and" et le "not"
Il est aussi de combiner plusieurs expressions grâce aux opérateurs logiques or et and. Une combinaison d'expression est aussi une expression (une combinaison d'expression est donc aussi soit True soit False).
| Opérateurs | mots-clés | Exemple | Résultats |
|---|---|---|---|
| Et logique | and | (2 < 3) and (5 <7 ) | True |
| Ou logique | or | (2 == 3) or (5 <7 ) | True |
| Non logique | not | not (5 <7 ) | False |
-
Il est aussi de combiner plusieurs expressions grâce aux opérateurs logiques
oretand. Une combinaison d'expression est aussi une expression (une combinaison d'expression est donc aussi soitTruesoitFalse) -
Par exemple si nous avons 2 expressions
exp1etexp2il est possible de les combiner à l'aide de l'opérateur logiqueor:exp1 or exp2estFalseuniquement siexp1etexp2sontFalse, elle estTruedans tous les autres cas.
Les résultats peuvent être regroupés dans ce que l'on appelle une table de vérité :
- Table de vérité pour le
or
| exp1 | exp2 | exp1 or exp2 |
|---|---|---|
| True | True | True |
| True | False | True |
| False | True | True |
| False | False | False |
- Table de vérité pour le
and
| exp1 | exp2 | exp1 and exp2 |
|---|---|---|
| True | True | True |
| True | False | False |
| False | True | False |
| False | False | False |
On trouve aussi le not comme opérateur logique avec la table de vérité suivante :
| exp | not (exp) |
|---|---|
| True | False |
| False | True |
3) Les instructions conditionnelles
Nous allons maintenant étudier une structure fondamentale en programmation le " si ...... alors.......sinon........".
L'idée de base est la suivante :
Siexpression est True alors suite_instruction1 est exécuté et suite_instruction2 est ignoré.
Sinon (sous-entendu que expression est False), suite_instruction2 est exécuté et suite_instruction1 est ignoré.
Notez l'indentation suite_instruction1 et de suite_instruction2.
Si on considère le programme suivant :
a < b qui est True, nous allons donc exécuter les 2 lignes
Alors, les lignes
seront ignorées.
En revanche la ligne linenums="0"
L'exécution de ce programme permettra d'afficher à l'écran :
Si maintenant on considère ce programme :
4) La boucle while
La notion de boucle est fondamentale en informatique. Une boucle permet d'exécuter plusieurs fois des instructions qui ne sont présentes qu'une seule fois dans le code.
La structure de la boucle while est la suivante :
expression sera True, on exécutera encore et encore instruction1 et instruction2. Après chaque exécution de instruction1 et instruction2 (on dit souvent "après chaque tour de boucle"), expression sera de nouveau évaluée (pour savoir si elle est toujours True ou si elle est devenue False).
Quand expression deviendra False on passera directement à suite programme (sans entrer de nouveau dans la boucle), la boucle sera terminée.
Que se passe-t-il si expression ne devient jamais False ? On entre alors dans une boucle "infinie" : c'est une erreur classique en programmation (aucun programme "bien fait" ne tombe dans une boucle infinie, s'il y a une boucle infinie, c'est qu'il y a forcement une erreur dans votre programme).
Considérons le programme suivant :
Voici comment analyser ce programme :-
Au début de l'exécution de ce programme nous avons la variable
iqui a pour valeur 0. -
Nous arrivons ensuite au niveau du
while: l'expressioni < 3estTrue, on "entre" donc dans la boucle : on affiche la valeur dei,donc 0, et on incrémenteide 1 (i a maintenant pour valeur 1) -
Nous passons au 2e tour de boucle : l'expression
i < 3estTrue, on "entre" donc dans la boucle : on affiche la valeur dei, donc 1, et on incrémenteide 1 (i a maintenant pour valeur 2). -
Nous passons au 3e tour de boucle : l'expression
i < 3estTrue, on "entre" donc dans la boucle : on affiche la valeur dei, donc 2 et on incrémenteide 1 (i a maintenant pour valeur 3). -
Nous passons au 4e tour de boucle : l'expression
i < 3estFalse(3 n'est pas strictement inférieur à 3), on n'entre pas dans la boucle et on passe à l'instruction qui suit immédiatement la boucle : on exécuteprint("FIN")et le programme s'arrête (il n'y a plus d'instruction après) -
Après l'exécution de ce programme, nous aurons à l'écran :
Il est très important que vous soyez capable d'effectuer l'analyse d'un programme comme nous venons de la faire ci-dessus, cela vous permettra d'éviter beaucoup d'erreurs.