Programmer en Python en 2nde

Les booléens

Le type boolean

Une variable de type boolean peut prendre deux valeurs : True ou False.


print(type(True))
print(type(False))

Affichage obtenu :

<class 'bool'>
<class 'bool'>

Les tests

Le cas le plus fréquent d'utilisation d'un booléen est un usage implicite dans les tests de comparaison.

Les comparaisons de nombres s'effectuent à l'aide des symboles suivants.

test symbole
Est-ce égal ? ==
Est-ce distinct ? !=
Est-ce strictement inférieur à ? <
Est-ce strictement supérieur à ? >
Est-ce inférieur ou égal à ? <=
Est-ce supérieur ou égal à ? >=

a = 2
b = 3
c = 5
print( a == b)
print( a+b == c)
print( a < b )
print( a <= c)
print( type( a == c) )

Affichage obtenu :

False
True
True
True
<class 'bool'>

Égalité de deux float

Le test d'égalité == est bien adapté pour un test entre deux entiers int ou entre deux chaînes de caractères str. Mais, du fait de la représentation des nombres en machine, il est mal adapté à la comparaison de deux float. Exécutez le code ci-dessous pour vous en convaincre :


		
		

On rappelle que ce problème est incontournable, quel que ce soit le langage de programmation. Il arrive que des choix de programmation puissent masquer partiellement ce problème. Celui-ci a déjà été souligné et rapidement expliqué dans le corrigé de l'exercice n°1 de cette page.

  • Une fonction Python pour tester l'égalité de deux float

Pour tester l'égalité de deux réels, on est donc contraint de tester en fait la proximité des deux float qui les représentent. Tout cela au risque, évidemment, de conclure à l'égalité alors que les réels représentés ne le sont pas. C'est un risque important et nous connaissons déjà tous la difficulté qu'ont une majorité d'élèves à l'appréhender (confusion classique entre un nombre et l'approximation affichée par la machine, voire avec une approximation quelconque...).

Python offre une fonction math.isclose() pour tester cette proximité :


from math import isclose

a = 2 + 3.001
b = 5.001

print( isclose(a,b) )

Le code ci-dessous renvoie l'affichage :

True

Cette fonction isclose() peut être paramétrée pour accepter une plus ou moins grande proximité (relative ou absolue) entre les float. Le règlage par défaut devrait convenir dans les situations pour la classe.

La documentation Python pour isclose().