Miamondo "dieu n'a pas voulu autre chose que la liberté" (commandant massoud)
http://miamondo.e-monsite.com

5 - Les booléens

Aujourd’hui, je vais vous parler des booléens. Les booléens sont des êtres farouches qui vivent au fin fond des forêts binaires recouvrant la terre sacrée du Grand Python Digital. Très difficiles à observer dans leur milieu naturel, bla, bla, bla…

Bon en fait, il s’agit d’une notion de programmation un peu déroutante que j’avais du mal à conceptualiser au début de mon apprentissage du Python.

Un peu d’histoire avec George Boole

Figurez-vous que celui qui a inventé l’algèbre booléenne s’appelle George Boole. Ce sujet anglais est né en 1815 et vous ne serez pas étonné d’apprendre qu’il est mort. C’est une pneumonie qui l’a emporté à l’âge de 49 ans, après que son épouse l’eût aspergé d’eau pour soigner le mal par le mal! (source: Wikipédia). C’est beau l’Amour!

Il est donc le père de l’algèbre de Boole que je suis bien incapable de vous expliquer. Durant ma scolarité,  je n’ai pas eu l’heur de me plonger plus avant dans cette mathématique mystérieuse (J’ai fait un bac A2). C’est la raison pour laquelle je vous renvoie à la page Wikipédia. Débrouillez-vous!

Cela dit, je peux quand-même vous parler des booléens dans mon langage de programmation préféré.

 

Définition

En Python, un booléen est un type de variables qui possède deux états :

  • L’état vraiTrue en anglais
  • Ou bien l’état fauxFalse en anglais

False == 0 et True == 1. Comment le prouver? C’est très simple. Nous allons créer deux variables (faux et vrai) et leur affecter respectivement les valeurs False et True. Ensuite, nous allons créer une liste de deux éléments indicés 0 et 1. Nous allons nous servir des deux variables comme indice pour retourner chacune des deux valeurs dans un print(). C’est parti:

 

 faux = False

 vrai = True

 liste = ["Allemagne", "France"]

 print ("1er pays: {}".format(liste[faux]))

 print("2ème pays:{}".format(liste[vrai]))

 

1er pays: Allemagne
2ème pays: France

Je rappelle que l’indice d’une liste ne peut être qu’un nombre entier. Le fait que j’aie réussi à retourner les deux éléments de la liste en utilisant comme indice les variables faux et vrai prouvent que ces dernières stockent des valeurs qui sont respectivement égales aux nombres entiers 0 et 1.

 

Amusons-nous avec un exemple un peu tordu

J’ai dit que faux était égal à 0, c’est-à dire faux == 0. Attention! J’ai bien écrit faux == 0 et non pas faux = 0. En effet, La variable faux ne stocke pas le nombre entier 0 mais bien le booléen False qui est égal à la valeur 0. En Python, je rappelle que le signe = est un signe d’affectation tandis que le signe == est le signe d’égalité.

Je vais donc évaluer l’expression (faux == 0)  pour savoir si elle est vraie ou fausse et  je vais stocker la valeur retournée dans cette même variable faux.

 

 faux = False
 faux = (faux == 0) # Évaluation d'une expression (vraie ou fausse?)
 print(faux)

 

True

L’expression faux == 0 est bien vraie (True). J’ai stocké le résultat dans la variable faux et maintenant faux = True! C'est tordu, je vous le concède.

 

Évaluation d’une expression

Bon, il s’agissait d’un exemple qui n’était pas du tout pédagogique. Je voulais simplement vous expliquer de manière ludique que Python évalue des expressions pour savoir si elles sont fausses ou vraies. Prenons un autre exemple plus parlant:

 

 faux = False

 nombre_1 = 5

 nombre_2 = 8

 result = (nombre_1 < nombre_2)

 print(result)

 

True

La variable result évalue si l’expression (nombre_1 < nombre_2) est vraie ou fausse. Il se trouve qu’elle est vraie puisque 5 est inférieur à 8. Donc le résultat est True.

 

Le type bool()

Les variables faux et vrai sont de types bool() car elles stockent les valeurs False et True.

 

 faux = False

 vrai = True

 print(type(faux))

 print(type(vrai))

 

<class 'bool'>

<class 'bool'>

Si on déclare une variable de cette manière : var = bool(), alors var stockera la valeur False.

 

 var = bool()
 print(var)

 

False

 

Les conditions sont sous l’emprise des booléens

Lorsque Python évalue une condition, soit le résultat est False (== 0), soit il est True (== 1). C’est comme cela qu’un ordinateur pense… uniquement avec des zéros et des uns!

 

 var = 5
 if var < 9:
     print("{} est inférieur à 9".format(var))
 else:
     print(
"{} est supérieur à 9".format(var))

 

5 est inférieur à 9

Qu’est ce qui s’est passé dans la tête de l’ordinateur? Il a évalué la condition. Est-ce que la variable var est inférieure à ? Oui, c’est vrai. Donc la condition vaut 1 car elle est True). Remplacez 5 par 12 par exemple et vous verrez que la condition vaudra 0. Elle sera False. Par conséquent, c’est le deuxième message qui s’affichera:

12 est supérieur à 9

Pour vous en convaincre, je vais de nouveau utiliser une expression conditionnelle avec la même variable:

 

 var = 5

 result = (var < 9)

 print(result)

 

True

L’expression conditionnelle est vraie.

À l’instar d’autres langages de programmation tels que le “C” par exemple, Python considère que toute valeur autre que 0 est vraie (True). Seule la valeur 0 est fausse (False).

  • Le nombre entier 0 est False tandis que les nombres entiers 6 et -6 sont True.
  • Une chaîne de caractères vide est False, une liste vide aussi.
  • Une chaîne de caractères avec au moins un élément est True, une liste avec au moins un élément est True aussi.

 

 chain_car = ""

 if chain_car:

     print("vrai")

 else:

     print("faux")

 chain_car2 = "Gabriel"

 if chain_car2:

     print("vrai")

 else:

     print("faux")

 

faux

vrai

Attention! à la première ligne, si vous mettez un espace entre les guillemets, la chaîne n'est pas vide, l'espace étant un caractère. Par conséquent, le résultat serait vrai.

 

 liste = []

 if liste:

     print("vrai")

 else:

     print("faux")

 liste2 = ["Gabriel", 6]

 if liste2:

     print("vrai")

 else:

     print("faux")

 

faux

vrai

Comme Python considère que toute valeur autre que 0 est True, je n’ai même pas besoin d’écrire par exemple, if var == 5: Je peux me contenter d'écrire:

 

 var = 5

 if var:

     print("c'est vrai")

 else:

     print("C'est faux")

 

La fonction print() affichera "C’est vrai" car elle a évalué que la condition était True. Or, si la condition est True, on lui demande d'afficher "C'est vrai".

 

L’instruction else

Dans une condition, le code indenté qui suit l’instruction else s’exécute lorsque l’évaluation est False (ou les évaluations précédentes sont toutes False). L’instruction else exécute un code qui est False.

 

L’instruction elif 

Le code indenté qui suit l’instruction elif s’exécute lorsque les tests précédents if et elif sont déclarés False. Mais contrairement à else, l’instruction elif exécute un code qui est True.

 

 var = 5

 if var == 6: #False

     print("var contient {}".format(var))

 elif var == 7#False

     print("var contient {}".format(var))

 elif var == 5#True

     print("var contient {}".format(var))

 

var contient 5

 

L’instruction not

En Python, l’instruction not transforme False(0) en True(1) et True(1) en False(0).

 

Nota

 

 

 var = 5

 var == not var

 print(var)

 

False

 

L’instruction and

L’expression a and b est vraie si a et b sont vrais tous les deux. Elle est fausse si a ou b est faux ou si a et b sont faux tous les deux. Voici un tableau qui résume ce que je viens d’écrire:

 

And

 

 

 var1, var2 = 5, 13

 if var1 == 5 and var2 == 13:

     print("c'est vrai.")

 else:

     print("c'est faux.")

 

C’est vrai.

 

L’instruction or

L’expression a or b est vraie si au moins l’une des deux variables est vraie. Elle est fausse si les deux variables sont fausses. Voici un tableau qui résume ce que je viens d’écrire:

 

Or

 

 

 

 

 

 

 

 


 

 

 var1, var2 = 5, 13

 if var1 == 5 or var2 == 18:

     print("c'est vrai.")

 else:

     print("c'est faux.")

 

C'est vrai

 

Les boucles while et for

On retrouve les booléens dans les boucles while et for qui exécutent un programme tant que la condition est vraie (True). À partir du moment où elle devient fausse (False), la boucle s’interrompt. Il est donc aisé (mais pas très malin!) de créer une boucle infinie si on fait en sorte que la condition soit vraie pour l’éternité (ou au moins pour les capacités de la mémoire RAM!).
 

 

 var = 5

 while var:

     print("Au secours! je viens de créer une boucle infinie")

 

À partir de là, seul un Ctrl + C est à même d’interrompre l’irrémédiable processus.

Au secours! Je viens de créer une boucle infinie.
Au secours! Je viens de créer une boucle infinie.
Au secours! Je viens de créer une boucle infinie.

 

Conclusion

Les booléens sont au coeur de la conscience-machine. Un ordinateur ne comprend que le langage binaire. C’est la raison pour laquelle il évalue la fausseté ou la véracité d’une expression uniquement en utilisant le 0 et le 1.

Date de dernière mise à jour : 04/03/2020

  • Aucune note. Soyez le premier à attribuer une note !

Ajouter un commentaire