Les booléens en Python⚓︎
Expressions booléennes⚓︎
Il existe un type pour les booléens en Python, le type bool
, les valeurs possibles sont True
et False
.
Les trois opérateurs de base sont and
, or
et not
(and
, or
s'écrivent aussi &
et |
).
Exercice
Sans utiliser l'interpréteur Python, donnez les valeurs des expressions booléennes suivantes :
- 2 < 5
- 1 == 3
- 4 != -1
- 1 == 2 or 1 < 2
- 8 in range(8)
- 5 in [2, 3, 5, 7]
- True and False
- not (4 == 1 and 1 == 2)
- not 4 == 1 and 1 == 2
Il est possible d'affecter la valeur d'une expression booléenne à une variable :
# voici une fonction qui détermine si un nombre vaut 1
def test_egal_un(nb):
resultat = (nb == 1) # cette ligne revient à : if nb == 1: resultat = True
return resultat
La même fonction, en plus court :
def test_egal_un(nb):
return nb == 1
XOR en Python
En Python, la fonction XOR a un symbole qui lui est réservé : c'est ^.
C'est pourquoi les puissances se notent ** et non ^.
Valeurs vues comme des booléens⚓︎
Lors de tests, Python considère automatiquement comme valant False
:
- les valeurs nulles, par exemple, 0 ou 0.0 ;
- les séquences ou chaînes de caractères vides, telles que '', (), [] ;
- la valeur None
Toutes les autres valeurs sont convertibles en True.
Il est également possible d'utiliser des connecteurs logiques entre des valeurs autres non booléennes ! Ceci donne des choses surprenantes :
5 or 0
renvoie 5 (car Vrai OU Faux donne Vrai : ici 5)3 and 2
renvoie 2 (car Vrai ET Vrai donne Vrai : Python renvoie le dernier True évalué, ici 2)'' and [4]
renvoie''
(car Faux et Vrai donne Faux : ici '')if a:...
sera vérifié sia
ne contient pas une valeur nulle ou vide.
Ainsi, à la fin de ce script :
a = 5
if a:
a = 3
la variable a aura pour valeur 3.
Attention
Ceci peut être une source d'erreur. Voici deux exemples :
- si une fonction est sensée renvoyer un booléen et qu'elle renvoie en fait une valeur quelconque, le programme ne fera pas ce qui est attendu ;
- une erreur chez les débutants : voulant tester si une variable
a
prend soit la valeur 1, soit la valeur 2, il est tentant d'écrire :🐍 Script PythonQue comprend Python ici ? L'expression booléenneif a == 1 or 2: ...
1 or 2
vaut 1 donca == 1 or 2
revient en fait àa == 1
!
La bonne méthode est donc d'écrire :
if a == 1 or a == 2:
...
if a in [1, 2]:
...
Évaluation paresseuse⚓︎
Python lit de gauche à droite et ne calcule pas ce qui n'est pas nécessaire.
Par exemple, dans l'expression booléenne 5 == 3 and 1 == 1
, le booléen 5 == 3
vaut False
or Faux ET ... donne toujours Faux donc le booléen 1 == 1
n'est pas évalué.
De même, l'expression 5 == 3 and 1/0 == 0
(division par zéro !) ne causera pas d'erreur à l'exécution !
Encore une bizarrerie :
2 == (2 or 3)
renvoieTrue
. Ici,2
vautTrue
, donc(2 or 3)
vaut2
: Python n'évalue pas 3 ;3 == (2 or 3)
renvoieFalse
! En effet, puisque(2 or 3)
vaut2
, le test revient à3 == 2
, ce qui est faux ;2 == (2 and 3)
renvoieFalse
. Ici,2
vautTrue
donc Python évalue3
, qui vautTrue
aussi, il renvoie doncTrue
, ici 3, dernière valeur évaluée ;3 == (2 and 3)
renvoie doncTrue
.
Une remarque pour terminer : lors d'une recherche séquentielle d'une valeur val
dans un tableau tab
, nous pourrions en Python écrire la boucle :
while indice < len(tab) and tab[indice] != val:
indice = indice + 1
indice == len(tab)
(le dernier indice acceptable est len(tab)-1
), le booléen tab[indice] != val
ne sera pas évalué et il n'y aura donc pas de risque de dépassement (sinon tab[len(tab)]
déclencherait un IndexError: list index out of range
).
Exercice
(Res)sources
Wikipedia pour la plupart des illustrations.
SimcirJS pour le simulateur de circuit.
http://www.courstechinfo.be/MathInfo/FctLogiques1.html
https://isn-icn-ljm.pagesperso-orange.fr/1-NSI/res/res_activite_6_alg_boole.pdf
https://isn-icn-ljm.pagesperso-orange.fr/1-NSI/res/res_activite_7_boole_python.pdf
https://lesmathsduyeti.fr/fr/lycee/nsi-premiere/booleens-porte-logique/
https://isnbreizh.fr/nsi/activity/boolean/index.html
https://isnbreizh.fr/nsi/activity/condition/index.html
Et en bonus, une calculatrice d'expressions booléennes