Python: Les booléens

Pour une lecture plus agréable (page plus large), je vous invite à cliquer sur ce lien et à lire ce chapitre dans la rubrique consacrée au langage Python.

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.

boole
Très rare cliché d’un booléen pris dans son environnement naturel

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 « vrai » : True en anglais
  • Ou bien l’état « faux » : False 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 = ["Corée du Nord", "États-Unis"]
print ("1er pays:", liste[faux])
print("2ème pays:", liste[vrai])

1er pays: Corée du Nord
2ème pays: États-Unis

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!

É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:

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!

a = 5
if a < 9:
    print(a, "est inférieur à 9")
else:
    print(a, "est supérieur à 9")

Résultat: 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 a est inférieure à 9? 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 :

Résultat: 12 est inférieur à 9

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

a = 5
result = (a < 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 = "Boole"
if chain_car2:
    print("vrai")
else:
    print("faux")

faux

vrai

liste = []
if liste:
    print("vrai")
else:
    print("faux")

liste2 = ["Boole", "George"]
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 a == 5: »

a = 5
if a == 5:
    print("C'est vrai")
else:
    print("C'est faux")

Je peux me contenter d’écrire « if a: »

a = 5
if a:
    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.

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.

a = 5
if a == 6: # False
    print("C'est vrai")
elif a == 7: # False
    print("C'est vrai")
elif a == 5: # True
    print("C'est vrai")
else: # False
    print("C'est faux") 

L’instruction not

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

not

a = 5
a = not a
print(a)

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

a, b = 5, 13
if a == 5 and b == 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

a, b = 5, 13
if a == 5 or b == 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!).

a = 5
while a:
    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.

line 1344, in write
return self.shell.write(s, self.tags)
KeyboardInterrupt

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.

Auteur : Ordinosor

Bienvenue sur Miamondo, mon blog personnel. "Mia mondo", c'est de l'espéranto et ça signifie "Mon monde" en français. Je m'appelle Benoît alias Ordinosor, Français expatrié en Allemagne. Mes centres d'intérêt sont les distributions GNU/Linux, le langage de programmation Python, la science-fiction et l'espéranto.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s