====== Variable booléenne ======
===== Boole =====
{{ .:george_boole.jpg?nolink&200|}}
George Boole, (1815, 1864), est un mathématicien britannique. Il est le créateur de la logique moderne que l'on appelle algèbre de Boole en son honneur. Il crée une algèbre binaire, dite booléenne, n'acceptant que deux valeurs numériques : 0 et 1. Cette algèbre est particulièrement utile en informatique.
===== Une expression vraie ou fausse =====
Un booléen est soit **VRAI** soit **FAUX**.
**Exemple :** On considère un système de porte automatique. Le système peut faire usage d'expressions comme celles-cis :
* "La porte est ouverte" -- Il s'agit de l'information d'un capteur
* "La porte s'ouvre"
* "Ouvrir la porte" -- Il s'agit plutôt d'un ordre donné au moteur\\ On pourrait dire aussi "Ouverture porte"
De toutes ces expressions, on peut dire qu'elles sont vraies ou fausses.
//On comprend sans ambiguïté ce que signifie "Ouvrir porte VRAI".//
**Contre-exemple :** ''%%4 + 5 * 7%%'' est un nombre, "''%%4 + 5 * 7%%'' VRAI" n'a aucun sens.
===== En Python =====
==== Le type bool ====
* VRAI -> ''%%True%%'',
* FAUX -> ''%%False%%''.
Le type des variables booléennes est ''%%bool%%''.
>>> type(True)
>>> type(False)
==== Transtypages ====
Certaines données, non booléennes, peuvent êtes interprétées comme booléennes si on le demande.
>>> bool("bbb")
True
>>> bool(0)
False
>>> bool(1)
True
>>> bool(54)
True
==== Les comparaisons ====
En général, les booléens sont obtenus par des expressions comme des comparaisons :
a == b # a est égal à b
a != b # a est différent de b
a <= b # a est inférieur ou égal à b
a < b # a est strictement inférieur à b
a > b # a est strictement supérieur à b
a >= b # a est supérieur ou égal à b
Ne pas confondre :
* ''%%a = 3%%'' signifie que l'on écrit la valeur ''3'' dans la variable ''a'',
* ''%%a == 3%%'' signifie que l'on demande si ''a'' est égal à ''3'' et selon le cas, le résultat est ''True'' ou ''False''.
>>> 5 == 5
True
>>> 3 + 2 == 5
True
>>> "5" == 5
False
>>> 5.0 == 5
True
>>> 0 == False
True
**Remarques :**
* il ne faut pas confondre le caractère ''%%"5"%%'' qui est juste un symbole sans valeur numérique, et le nombre ''%%5%%'',
* pour le mathématicien, il est évident que ''%%5.0 == 5%%'' mais c'est moins évident pour le programme : ''5.0'' et ''5'' sont stockés de façon très différentes dans la mémoire de l'ordinateur -- cf cours [[nsi:premiere:numeration|entiers positifs]] et [[nsi:premiere:flottants|nombres flottants]].
==== Comparaison, un opérateur comme un autre ====
>>> 3 + 2 == 5
True
>>> 3 + (2 == 5)
3
La première expression semble aller de soi. On fait évidemment le calcul ''3 + 2'' avant de tenter la comparaison. Mais alors quel est le sens de la deuxième expression ? Ne devrait-on pas avoir une erreur ?
''%%==%%'' est interprété comme un symbole de calcul. Voici la séquence :
* Les parenthèses forcent l'évaluation de ''%%2 == 5%%'' dont le résultat est ''False''
* On calcule donc ''%%3 + False%%''. L'addition ''3 + '' provoque le changement de ''False'' en un entier, ''False'' -> ''0''.
* On calcule donc ''%%3 + 0%%'', d'où le résultat.
Ces transformations automatiques permettent des astuces et des raccourcis parfois très pratiques. Mais mieux vaut ne pas en abuser si on veut garder un code suffisamment lisible.