Vidéo 6 : Comparaisons¶
Opérateurs « égale à » et « différent de »¶
Opérateur ==
¶
On peut tester l’égalité de valeur de deux objets avec l’opérateur ==
:
1 2 | print(42 == 21 + 21)
print(42 == 10 + 10)
|
3 4 | True
False
|
- Lignes 3 : si les valeurs sont égales l’opérateur
==
ligne 1 renvoie la valeur logiqueTrue
- Ligne 4 : si les valeurs comparées ne sont pas égales (42 et 20) l’opérateur
==
renvoieFalse
.
Il faut effectivement écrire deux fois de suite le signe =, sans espace entre les deux.
Quand on lit True
(ligne 1, ligne 4), il faut comprendre que l’expression 42 == 21 + 21
est un « machin » (un objet pour être correct) qui vaut True
. Le code ci-dessous permet peut-être de mieux le comprendre :
1 2 | machin = (42 == 21 + 21)
print(machin)
|
3 | True
|
Opérateur !=
¶
Pour tester si deux objets ont des valeurs distinctes, on utilise l’opérateur !=
(lire : différent de). C’est l’opérateur « contraire » de ==
:
1 2 | print(42 != 21 + 21)
print(42 != 10 + 10)
|
3 4 | False
True
|
Comparaison de nombres¶
Le langage Python dispose d’opérateurs permettant d’effectuer des comparaisons de nombres :
1 2 3 4 | print(42 > 24)
print(42 <= 24)
print(3.14159 < 2.71828)
print(24 >= 2 * 12)
|
5 6 7 8 | True
False
False
True
|
On peut comparer des nombres au sens des opérateurs mathématiques suivants :
\(< \quad \leq \quad >\quad \geq\)
En Python, on utilise les opérateurs suivants :
<
, <=
, >
et >=
Une comparaison renvoie un booléen True
ou False
(Vrai ou Faux) qui précise si l’inégalité écrite est vraie ou fausse.
Encadrement¶
On peut utiliser les opérateurs de comparaison en les enchaînant, comme on le fait usuellement en mathématiques :
1 2 | print(42 < 81 < 100 <= 512)
print(42 < 81 < 100 < 100)
|
3 4 | True
False
|
Comparaison de flottants¶
L’arithmétique en nombres flottants est approchée. L’exemple ci-dessous illustre le type de problème rencontré :
1 | print(6 * 0.7 == 4.2)
|
2 | False
|
- Ligne 1: mathématiquement, \(6\times 0,7 = 4,2\)
- Ligne 2 : pourtant, Python ne considère pas les deux nombres comme identiques !
De même :
1 | print(42/6==4.2/0.6)
|
2 | False
|
Cette limitation provient l’impossibilité de représenter exactement en base 2 et avec un nombre limité de bits certains nombre réels.
D’où la conséquence suivante :
Règle fondamentale : on n’utilise jamais l’opérateur ==
pour comparer deux flottants.
Confusion entre égalité et affectation¶
Le signe =
est le signe de l’affectation. Il ne faut pas le confondre avec l’opérateur ==
d’égalité de valeurs. C’est un source fréquente d’erreur d’inattention, y compris chez les programmeurs non débutants.
Assez souvent, la confusion déclenche un message d’erreur :
1 2 | x == 42
print(x)
|
2 3 4 5 | Traceback (most recent call last):
File "_.py", line 1, in <module>
x == 42
NameError: name 'x' is not defined
|
- Ligne 1 : confusion de
==
avec=
: la ligne examine si les valeurs dex
et 42 sont égales maisx
n’a pas été défini. - Ligne 6 : la nature de l’erreur est confirmée par le message.
Autre erreur possible :
1 2 | x = 42
print(x = 421)
|
2 3 4 5 | Traceback (most recent call last):
File "egalite_vs_affectation.py", line 2, in <module>
print(x = 421)
TypeError: 'x' is an invalid keyword argument for this function
|
- Ligne 2 : confusion de
=
avec==
(une affectation n’est pas une expression donc on ne peut pas l’afficher) - Lignes 3-6 : l’erreur est plus difficile à interpréter et nécessite des connaissances plus poussées sur la fonction
print
et les fonctions en général.
Mais parfois, il n’y a aucun déclenchement d’erreur :
1 2 3 4 | x = 42
print(x)
x == 100
print(x)
|
5 6 | 42
42
|
- Ligne 3 : sans doute le programmeur voulait-il écrire une nouvelle affectation
x = 100
. Mais cette erreur de programmation ne déclenche aucune erreur d’exécution.