Dans la première partie, vos programmes s'exécutaient du début à la fin, chaque ligne, à chaque fois. Les vrais programmes ne fonctionnent pas ainsi. Ils vérifient une condition et empruntent un chemin ou un autre : le mot de passe est-il correct, le panier est-il vide, le score est-il suffisant pour une mention. Cette leçon donne ce pouvoir à votre code. Vous allez découvrir l'ensemble des opérateurs Python, comment le langage détermine ce qui est considéré comme vrai, et les trois outils de branchement : la classique cascade if, elif et else, l'expression conditionnelle pour les instructions en une ligne, et la moderne instruction match introduite avec Python 3.10.
C'est aussi la leçon où la caractéristique la plus célèbre de Python cesse d'être une anecdote pour devenir une règle de grammaire que vous utiliserez : l'indentation. Chaque construction de branchement crée un bloc, et en Python un bloc est défini par le niveau d'indentation de ses lignes. Familiarisez-vous avec cela ici et le reste du cours, où les blocs s'imbriquent dans des fonctions à l'intérieur de classes, vous semblera naturel plutôt que tatillon.
Ce que vous apprendrez dans la partie 2
- Les opérateurs arithmétiques, d'affectation et de comparaison, y compris les comparaisons chaînées
- La logique booléenne avec and, or et not, ainsi que l'évaluation paresseuse
- La véracité : ce que Python traite comme vrai et faux au-delà de True et False
- Comment l'indentation définit les blocs, de manière précise et sans exception
- Le branchement avec if, elif et else, et les expressions conditionnelles en une ligne
- Le filtrage par motif structurel avec match et case
Remarque
Avant de commencer
Vous devez être à l'aise avec les variables, les types de base et les f-strings de la partie 1. Chaque exemple ci-dessous s'exécute dans l'environnement de test plus bas sur la page, gardez-le donc ouvert dans un second onglet si vous aimez expérimenter au fil de votre lecture.
1. Opérateurs arithmétiques et d'affectation, version complète
La partie 1 a présenté les opérateurs arithmétiques en passant ; voici le tableau complet. L'addition, la soustraction et la multiplication se comportent comme prévu. La division avec une simple barre oblique produit toujours un float, même lorsque le résultat est entier, car Python refuse de perdre silencieusement de la précision. La double barre oblique effectue une division entière, en arrondissant au nombre entier inférieur, et le signe pour cent donne le reste de cette division. Deux astérisques élèvent à une puissance. L'opérateur modulo est le héros méconnu de cet ensemble : vérifier si un nombre est pair, parcourir un intervalle fixe, et le classique entretien d'embauche FizzBuzz reposent tous sur lui.
print(17 / 5) # 3.4 true division, always float
print(17 // 5) # 3 floor division
print(17 % 5) # 2 remainder
print(17 % 2) # 1 odd number, remainder 1; even numbers give 0
print(3 ** 4) # 81 power
# Augmented assignment rewrites the variable in place
score = 10
score += 5 # same as score = score + 5
score *= 2 # same as score = score * 2
print(score) # 30
Les opérateurs d'affectation augmentée, +=, -=, *= et leurs semblables, sont de purs raccourcis, mais vous les verrez dans tous les fichiers Python jamais écrits, alors rendez-les automatiques dès maintenant. Une autre famille d'opérateurs qu'il vaut la peine de rencontrer tôt : les chaînes répondent aussi à + et *. Ajouter deux chaînes les colle ensemble, et multiplier une chaîne par un entier la répète. Python n'ajoutera cependant pas une chaîne à un nombre ; comme vous l'avez appris à vos dépens dans la partie 1, il lève une TypeError et vous explique exactement pourquoi.
2. Comparaisons, et un tour de magie de Python
Les opérateurs de comparaison posent des questions sur les valeurs et répondent toujours par un booléen. Vous avez l'égalité ==, l'inégalité !=, et les quatre relations d'ordre <, <=, >, >=. Ils fonctionnent sur les nombres, sur les chaînes (ordre alphabétique, toutes les majuscules se classant avant toutes les minuscules), et sur la plupart des choses que vous rencontrerez plus tard. Le double égal mérite le respect : le confondre avec l'affectation simple égal est le bug classique du débutant, bien que Python refuse au moins de vous laisser faire une affectation à l'intérieur d'une condition if, transformant l'erreur en une erreur visible plutôt que silencieuse.
age = 19
print(age == 19) # True
print(age != 21) # True
print("apple" < "banana") # True, alphabetical
# Chained comparisons read like math
print(18 <= age < 65) # True: age is between 18 and 64
Cette dernière ligne est le tour de magie. La plupart des langages vous obligent à écrire age >= 18 and age < 65. Python vous permet de chaîner les comparaisons exactement comme le font les mathématiques, et la forme chaînée est à la fois plus courte et plus difficile à mal écrire. Utilisez-la chaque fois que vous vérifiez qu'une valeur se situe dans un intervalle.
3. Logique booléenne et notion de véracité
Les conditions se combinent avec trois mots-clés : and, or et not. Une expression and est vraie seulement quand les deux côtés sont vrais ; une expression or est vraie quand au moins un côté l'est ; not inverse son opérande. Python les évalue de manière paresseuse, un comportement appelé évaluation en court-circuit : dans a and b, si a est déjà faux, b n'est même pas examiné, et dans a or b, si a est vrai, b est ignoré. Ce n'est pas seulement une optimisation. Du code comme balance > 0 and price / balance < 0.5 en dépend : quand le solde est nul, la division dangereuse à droite ne s'exécute jamais.
Python étend le vrai et le faux au-delà des deux valeurs booléennes, et la règle vaut la peine d'être mémorisée une fois car elle ne change jamais. Le nombre zéro, la chaîne vide, la liste vide, le dictionnaire vide et None comptent tous comme faux dans une condition. Tout le reste compte comme vrai. Le code pythonique s'appuie constamment là-dessus : if name: se lit comme si un nom a été fourni, et if not items: se lit comme si la liste est vide. Vous écrirez ces deux lignes exactes des centaines de fois dans votre carrière.
name = ""
items = [1, 2, 3]
if not name:
print("No name given") # runs: empty string is falsy
if items:
print(f"{len(items)} items") # runs: non-empty list is truthy
logged_in = True
is_admin = False
print(logged_in and is_admin) # False
print(logged_in or is_admin) # True
print(not is_admin) # True
Point de contrôle
À quoi bool("False") s'évalue-t-il ?
4. Indentation : comment Python définit un bloc
Venons-en à la grammaire qui rend le branchement possible. Un bloc en Python est un groupe d'instructions qui appartiennent à une ligne d'en-tête, et cette appartenance est déclarée par l'indentation. L'en-tête se termine par deux-points, et chaque ligne indentée d'un niveau en dessous lui appartient. Le bloc se termine à la première ligne qui revient à l'indentation précédente. La convention universelle est de quatre espaces par niveau, et tout éditeur sérieux les insère quand vous appuyez sur Tab. La seule règle véritable est la cohérence : mélanger tabulations et espaces dans un même fichier est une erreur, et changer la largeur d'indentation en cours de fichier est un crime contre la lisibilité.
Si vous avez programmé ailleurs, cela remplace les accolades, et après une journée vous ne les regretterez pas. Si Python est votre premier langage, vous avez la tâche la plus facile : la structure visuelle que vous utiliseriez naturellement pour garder le code propre est tout simplement la loi. Dans les deux cas, quand Python se plaint d'une IndentationError ou d'une indentation inattendue, il vous dit que la forme de votre code ne correspond pas à votre intention, et la solution consiste toujours à aligner correctement le bloc.
5. if, elif et else
L'instruction if évalue une condition et n'exécute son bloc que si la condition est vraie. Un bloc else optionnel prend en charge le cas contraire. Entre les deux, vous pouvez empiler autant de branches elif que vous voulez, abréviation de else if, qui sont testées dans l'ordre jusqu'à ce que l'une corresponde. Exactement une branche de l'échelle s'exécute, toujours, et l'ordre des elif a donc de l'importance : placez les tests les plus spécifiques en premier. Voici un exemple complet et réaliste, la logique de seuil de notes utilisée par pratiquement toutes les écoles du monde.
score = 73
if score >= 75:
grade = "A"
elif score >= 65:
grade = "B"
elif score >= 50:
grade = "C"
elif score >= 35:
grade = "S"
else:
grade = "F"
print(f"Score {score} earns grade {grade}") # Score 73 earns grade B
Parcourez l'échelle avec un score de 73. Le premier test échoue car 73 est inférieur à 75. Le deuxième test réussit, la note devient B, et le reste de l'échelle est entièrement ignoré, ce qui explique pourquoi les conditions plus larges qui suivent n'ont jamais la possibilité d'écraser la réponse. Si vous inversiez l'ordre et testiez score >= 35 en premier, chaque score de passage aboutirait à S. Lorsqu'une échelle se comporte mal, simulez-la à la main exactement comme ceci, de haut en bas, et le bogue se révèle presque toujours en quelques secondes.
Pour les choix simples, Python propose une expression conditionnelle qui tient sur une ligne : valeur_si_vrai if condition else valeur_si_faux. Elle brille pour les affectations simples comme label = "pair" if n % 2 == 0 else "impair" et devient illisible dès que vous l'imbriquez, alors traitez-la comme un assaisonnement, pas comme un plat principal.
6. L'instruction match
Python 3.10 a ajouté match, et c'est l'outil approprié lorsque vous comparez une valeur à une série de formes spécifiques plutôt que de tester des conditions arbitraires. La valeur après match est comparée à chaque cas dans l'ordre ; le premier motif qui correspond l'emporte, un tiret bas sert de valeur par défaut universelle, et vous pouvez attacher une condition supplémentaire à n'importe quel cas avec if. Là où une échelle if pose de nombreuses questions sans rapport, un match se lit comme un menu.
command = "help"
match command:
case "start":
print("Starting the engine")
case "stop" | "halt": # either word matches
print("Stopping")
case "help":
print("Available: start, stop, help")
case _:
print(f"Unknown command: {command}")
match peut faire bien plus que comparer des chaînes ; il peut déstructurer des tuples, des listes et des dictionnaires, et plus tard dans la série vous le verrez déballer des données structurées en un seul mouvement élégant. Pour l'instant, utilisez-le chaque fois qu'une échelle if consisterait entièrement en tests x == quelque chose, et tenez-vous-en à if pour tout le reste. Les deux sont idiomatiques ; choisir entre eux revient à déterminer lequel se lit le mieux à l'endroit de l'appel.
Point de contrôle
Dans une échelle if/elif/else, combien de branches s'exécutent ?
7. Pratique : un calculateur de tranches d'imposition
Il est temps de tout combiner : comparaisons, logique booléenne, une échelle et les f-strings de la Partie 1. Le bac à sable ci-dessous implémente un calcul d'impôt progressif simplifié. Exécutez-le, puis faites les exercices dans les commentaires : ils vous demandent d'ajouter une tranche, de vous prémunir contre les entrées négatives avec un test de vérité, et de convertir une décision en expression conditionnelle. Chaque modification que vous effectuez et vérifiez vaut dix fois celles que vous vous contentez de lire.
Remarquez comment la garde contre les revenus négatifs enveloppe tout le calcul, l'échelle étant indentée d'un niveau supplémentaire à l'intérieur du else. Une telle imbrication est normale et saine jusqu'à deux ou trois niveaux. Au-delà, le code devient difficile à suivre, et la solution professionnelle consiste à restructurer, généralement en retournant tôt depuis une fonction, une technique qui prendra tout son sens après la Partie 4.
! Erreurs courantes à éviter
-
✕Écrire if score = 100: et obtenir une SyntaxError.
✓L'affectation utilise =, la comparaison utilise ==. Python refuse d'affecter à l'intérieur d'une condition précisément pour attraper cette erreur classique.
-
✕Oublier les deux-points à la fin des lignes if, elif ou else.
✓Chaque en-tête de bloc en Python se termine par deux-points. Le message d'erreur pointe vers la ligne ; la correction ne demande qu'une frappe.
-
✕Ordonner les tests elif du plus large au plus strict, de sorte que le premier test large intercepte tout.
✓Ordonnez l'échelle du plus spécifique au moins spécifique, et parcourez une valeur d'exemple à la main pour confirmer.
-
✕Tester if réponse == "oui" or "o": et constater que c'est toujours vrai.
✓Cela est analysé comme (réponse == "oui") or ("o"), et une chaîne non vide est évaluée comme vraie. Écrivez plutôt réponse in ("oui", "o").
? Foire aux questions
Existe-t-il une instruction switch en Python ? +
match, ajouté dans Python 3.10, remplit ce rôle et va plus loin avec les motifs structurels. Avant la 3.10, l'idiome était une échelle if/elif ou une recherche dans un dictionnaire, que vous rencontrerez encore dans du code plus ancien.
Pourquoi quatre espaces et pas des tabulations ? +
Quatre espaces est la convention de la PEP 8, le guide de style officiel, et la valeur par défaut dans tout éditeur moderne. Ce qui importe vraiment, c'est la cohérence au sein d'un fichier ; mélanger tabulations et espaces est une erreur de syntaxe.
Puis-je mettre un if sur une seule ligne ? +
De deux manières : l'expression conditionnelle (x if cond else y) pour choisir une valeur, et une instruction simple comme if prêt: lancer(). La première est idiomatique ; la seconde est autorisée mais déconseillée en dehors de scripts rapides.
Python a-t-il && et || comme d'autres langages ? +
Non, Python les écrit and, or et not. Si vous tapez &&, vous obtenez une SyntaxError ; ces mots sont l'une des raisons pour lesquelles les conditions Python se lisent si près de l'anglais.
8. Récapitulatif et la suite
Vos programmes peuvent maintenant réfléchir : opérateurs arithmétiques et de comparaison complets, comparaisons chaînées, logique booléenne avec court-circuit, véracité, blocs définis par l'indentation, l'échelle if/elif/else, les expressions conditionnelles et match. Ces outils apparaissent dans chaque leçon d'ici la fin de la série, ce qui explique qu'ils aient eu droit à une leçon entière.
Les décisions seules ne suffisent pas ; les programmes gagnent leur vie en répétant le travail. La Partie 3, Boucles et contrôle de flux en Python couvre for, while, break, continue et les motifs de boucle qui alimentent tout, des tables de multiplication aux pipelines de données. Les leçons Opérateurs, Prise de décision et Contrôle de flux dans l'application Apprendre Python ci-dessous reflètent ce contenu avec des quiz supplémentaires si vous voulez plus de pratique, et le programme complet se trouve sur le hub de la série.
Astuce de pro
Quand une condition vous embrouille, affichez-la. La ligne print(revenu <= 500_000, taux) ne coûte rien et montre les booléens réels que votre échelle voit, ce qui est plus efficace que de fixer le code en devinant à chaque fois.
Pratiquez en déplacement
Apprendre Python, l'application Android gratuite
Chaque sujet de cette série se trouve aussi dans l'application : leçons concises, exemples exécutables, quiz, mini-projets et un environnement Python hors ligne qui fonctionne sur votre téléphone.
Commentaires
0Aucun commentaire pour l’instant. Soyez la première personne à donner votre avis.