Définition
Écrire un programme, c'est résoudre sans arrêt de petits problèmes : additionner deux nombres, vérifier un seuil, décider si deux conditions sont vraies à la fois. Un opérateur répond à ce besoin : il prend une ou deux valeurs, agit dessus, et rend un résultat. Le + additionne, le > compare, le = range.
Ces symboles sont les briques les plus élémentaires du langage : toute expression se ramène à une suite d'opérateurs appliqués à des valeurs. Voici trois familles réunies dans un seul exemple.
total = 12 + 8 # arithmétique
assez = total >= 20 # comparaison
valide = assez and total < 100 # logiqueLes valeurs sur lesquelles il travaille s'appellent des opérandes. Point qui surprend souvent au début : un opérateur ne les modifie presque jamais, il fabrique une valeur neuve, qui disparaît aussitôt si elle n'est rangée nulle part, par exemple dans une variable.
Les cinq familles
Python compte une quarantaine d'opérateurs, impossible à mémoriser un par un. Ce qui compte n'est pas leur écriture, mais ce qu'ils rendent une fois l'action terminée : cinq familles suffisent à tout couvrir.
| Famille | Écriture | Résultat produit |
|---|---|---|
| Arithmétiques | + - * / // % ** | Un nombre |
| Comparaison | == != < > <= >= | Un bool |
| Logiques | and, or, not | Un booléen, ou l'un des opérandes |
| Appartenance et identité | in, is | Vrai ou faux |
| Affectation | = += -= *= //= | Rien, ils rangent une valeur |
Retenir un opérateur par son résultat évite la confusion la plus fréquente au début : croire que tout symbole se combine librement. Une comparaison rend un booléen, elle a sa place dans une condition ; une affectation ne rend rien, et Python refuse de l'y placer.
La priorité change le résultat
Tant qu'une expression ne contient qu'un seul opérateur, il n'y a rien à trancher. Les ennuis commencent dès qu'on en mélange plusieurs : Python doit décider dans quel ordre les appliquer, et cet ordre change parfois le résultat. La règle ressemble à celle apprise en mathématiques : puissance avant multiplication, multiplication avant addition, comparaison avant opérateurs logiques, et parmi ces derniers not avant and, lui-même avant or.
Deux exemples le montrent, le second nettement plus lourd de conséquences que le premier.
2 + 3 * 4
# 14, et non 20
age > 18 and pays == "FR" or admin
# lu comme : (age > 18 and pays == "FR") or adminLa seconde ligne est un bug de production en puissance : un compte administrateur franchit la porte quel que soit son âge, parce que le or final rattrape tout ce qui précède. La parenthèse ne coûte rien et vaut toujours mieux que la mémoire du tableau de priorités, même quand elle est techniquement superflue.
Quatre pièges à connaître
Le premier tient à un seul signe. = range une valeur, == compare deux valeurs. Les confondre ne rend pas un résultat faux : Python refuse d'exécuter la ligne et lève une erreur de syntaxe, repérable avant même que le programme ne tourne. Affecter en pleine expression reste possible, sous l'écriture distincte de l'opérateur walrus.
Le deuxième concerne la division : deux entiers qui se divisent parfaitement rendent-ils un entier ? Non, / renvoie toujours un float : 10 / 2 vaut 5.0, pas 5. Un entier demande //, qui tronque la partie décimale. Diviser par zéro ne donne aucun infini : Python lève une ZeroDivisionError, qui arrête le programme si personne ne l'intercepte.
Le troisième vient du +, qui change de sens selon ce qu'on lui donne : il additionne, met bout à bout deux chaînes, assemble deux listes. Mélanger les genres, un nombre et une chaîne par exemple, lève une TypeError, la panne la plus courante sur une saisie utilisateur qui arrive toujours en texte.
Le quatrième oppose == et is, le plus difficile à repérer, car les deux répondent souvent pareil sans l'être. Le premier demande si deux valeurs sont égales, le second si elles désignent le même objet en mémoire. Python réutilise parfois le même objet sur de petits nombres ; sur des listes ou de grands nombres, ils divergent. En pratique, is ne sert qu'à comparer à None.
Questions fréquentes
À quoi sert l'opérateur pourcent ?
Le symbole % donne le reste d'une division entière : 17 % 5 vaut 2, car 5 entre trois fois dans 17 avec deux de reste. Son usage le plus courant reste le test de divisibilité, avec nombre % 2 == 0 pour reconnaître un nombre pair, ou i % 10 == 0 pour déclencher une action une fois sur dix dans une boucle.
Peut-on enchaîner deux comparaisons ?
Oui, et c'est une particularité de Python : 0 < note <= 20 s'écrit d'un seul tenant et se lit comme en mathématiques. La plupart des langages imposent ici deux comparaisons séparées, reliées par un and, une écriture plus longue et moins lisible.
Pourquoi and et or ne renvoient-ils pas toujours vrai ou faux ?
Parce qu'ils renvoient l'opérande qui a tranché plutôt qu'un booléen : "" or "défaut" vaut la chaîne "défaut", pas True. Ils s'arrêtent dès que le résultat est acquis, ce qui permet de vérifier qu'une valeur existe avant l'accès qui échouerait sur elle. Ces raccourcis font gagner des lignes une fois acquis, et notre formation Python les met en pratique au fil des exercices.