Conditions et logique booléenne en Python
and, or et not, puis utilise if, elif et else pour exécuter le code adapté à chaque situation. Imbrique ensuite des décisions, utilise la valeur de vérité des valeurs, teste chaque branche avec des entrées bien choisies et choisis parmi plusieurs cas avec l’instruction match.DébutantUnité 2 sur 10 de la formation Formation : Python : variables, boucles, fonctions et fichiers
Ce que tu vas apprendre
- Écris des comparaisons avec les six opérateurs de comparaison de Python, prévois si elles donnent
TrueouFalsepour des nombres et du texte, et évite les confusions qui rendent une condition incorrecte sans le signaler.- Comparer des nombres avec les six opérateurs de comparaisonUtilise
==,!=,<,<=,>et>=pour comparer des nombres, lis chaque résultat comme une valeur booléenne et distingue la comparaison de l’affectation. - Comparer du texte, des types différents et des intervallesCompare des chaînes exactement et dans l’ordre alphabétique, convertis les saisies avant de les comparer à des nombres et teste les intervalles, l’appartenance et
Noneavec le bon opérateur.
- Comparer des nombres avec les six opérateurs de comparaison
- Écris des décisions à une, deux ou plusieurs branches pour qu’un programme exécute le bon bloc de code dans chaque situation, et prévois exactement quelles lignes sont exécutées pour une entrée donnée.
- Exécuter du code uniquement si une condition est vraieÉcris une instruction
ifavec son en-tête, ses deux-points et son bloc indenté, puis suis les lignes exécutées et celles qui sont ignorées. - Choisir entre deux actions avec if et elseAjoute une branche
elsepour qu’un seul des deux blocs soit exécuté et utilise une expression conditionnelle pour choisir entre deux valeurs sur une seule ligne. - Choisir parmi plusieurs cas avec elifConstruis des chaînes
if–elif–elsequi testent les conditions dans l’ordre et n’exécutent que la première branche dont la condition est vraie, puis ordonne les tests pour que chaque entrée aboutisse au bon cas.
- Exécuter du code uniquement si une condition est vraie
- Associe et nie des conditions avec
and,oretnot, prévois leurs résultats avec des tables de vérité et lis les conditions plus longues dans l’ordre où Python les évalue.- Associer et nier des conditions avec and, or et notUtilise les tables de vérité pour prévoir les résultats de
and,oretnot, traduis des règles de la vie courante en conditions combinées et évite l’erreur classique avecor. - Prévoir comment Python évalue des conditions plus longuesApplique la priorité des opérateurs et l’évaluation en court-circuit, ajoute des parenthèses qui rendent le regroupement voulu explicite et réécris les conditions niées avec les lois de De Morgan.
- Associer et nier des conditions avec and, or et not
- Imbrique des décisions lorsqu’un choix dépend d’un autre, teste directement des valeurs grâce à leur valeur de vérité, puis suis et teste chaque branche pour vérifier la logique pour chaque entrée.
- Imbriquer des décisions les unes dans les autresPlace une instruction
ifdans une autre branche lorsqu’une seconde décision dépend de la première, lis l’imbrication grâce à l’indentation et aplatis-la lorsqueandouelifexprime la même chose plus simplement. - Tester directement des valeurs grâce à leur valeur de véritéPrévois quelles valeurs Python considère comme vraies ou fausses dans une condition, utilise cette propriété pour tester brièvement si une saisie est vide et évite les pièges où
0,"0"ou"False"se comportent de façon inattendue. - Suivre et tester chaque branche d’une décisionSuis une décision à la main, choisis des entrées de test qui atteignent chaque branche et chaque limite, puis corrige les conditions qui laissent des cas non couverts, des chevauchements ou des branches impossibles à exécuter.
- Imbriquer des décisions les unes dans les autres
- Utilise l’instruction
matchde Python pour comparer une valeur à plusieurs motifs, capturer des valeurs et ajouter des gardes, puis décide quandmatchest plus clair qu’une chaîneif–elif.- Comparer une valeur à des cas fixésÉcris une instruction
matchavec des motifs littéraux, des alternatives et un motif attrape-tout, puis prévois quel cas unique s’exécute. - Capturer des valeurs et ajouter des gardes aux casUtilise des motifs de capture et
aspour nommer la valeur correspondante, ajoute des gardesifpour les conditions qu’un littéral ne peut pas exprimer et évite le piège d’un nom de variable dans un cas qui correspond à tout.
- Comparer une valeur à des cas fixés
Conditions en Python : cours
1Des comparaisons qui répondent par oui ou par non
Un programme a besoin d’un test précis avant de pouvoir choisir une action. Les comparaisons transforment des questions sur des valeurs en réponses utilisables par Python : le score est-il assez élevé, la réponse correspond-elle ou la saisie est-elle dans un intervalle valide ? Les nombres et le texte suivent des règles de comparaison différentes. Lire ces règles attentivement aide à repérer des erreurs qui semblent raisonnables à l’écran, surtout à une limite ou lorsque des chiffres saisis sont encore stockés sous forme de texte.
1.1 Nombres, égalité et limites
Une comparaison pose une question sur des valeurs. Son résultat est une valeur booléenne : True ou False. Ce sont des valeurs de type bool, écrites avec une majuscule initiale et sans guillemets. "True" est du texte ; true en minuscules est un nom qui provoque une NameError lorsqu’il n’a pas été défini.
Choisir l’opérateur qui correspond à la règle
| Opérateur | Question | Avec x = 7 |
|---|---|---|
== | Égal à ? | x == 7 donne True |
!= | Différent de ? | x != 7 donne False |
< | Inférieur à ? | x < 7 donne False |
<= | Inférieur ou égal à ? | x <= 7 donne True |
> | Supérieur à ? | x > 5 donne True |
>= | Supérieur ou égal à ? | x >= 7 donne True |
Les deux caractères d’un opérateur restent ensemble, avec = en dernier. Écris <=, et non =<. Un entier et un flottant peuvent être égaux : 7 == 7.0 donne True car leurs valeurs numériques sont égales.
Une comparaison est une expression : tu peux donc afficher ou stocker son résultat :
x = 7
is_big = x > 5
print(is_big)
Python évalue x > 5, obtient True et affecte cette valeur à is_big. La sortie est True. Un nom comme is_big ou has_ticket donne à une variable booléenne la forme d’une question à laquelle on répond par oui ou par non.
Distinguer affectation et comparaison
x = 5 stocke une nouvelle valeur dans x. x == 5 vérifie la valeur actuelle sans la modifier. Écrire if x = 5: est une erreur de syntaxe. L’erreur inverse peut être plus difficile à remarquer :
x = 7
x == 5
print(x)
Dans un script, le résultat de la comparaison n’est pas utilisé. La sortie reste 7 ; la ligne du milieu n’affecte jamais 5.
Effectuer les calculs avant de comparer
Dans 2 + 3 > 4, Python effectue d’abord l’addition et obtient 5, puis compare 5 > 4. Le résultat est True. Un test utile pour les entiers est n % 2 == 0 : % donne le reste de la division et les nombres pairs donnent un reste de 0 lorsqu’ils sont divisés par 2.
Pour n = 10, les étapes sont 10 % 2, puis 0 == 0, ce qui donne True. Pour n = -7, -7 % 2 vaut 1 : le test de parité vaut donc False. Avec le diviseur positif 2, le reste donné par Python pour un entier impair est 1, même si cet entier impair est négatif.
Déterminer si la limite est incluse
« Au moins 18 » inclut 18 : age >= 18. « Plus de 18 » l’exclut : age > 18. De même, « moins de 13 » s’écrit age < 13 et « au maximum 3 » s’écrit bags <= 3. Teste la valeur limite elle-même lorsque tu choisis un opérateur. Pour age = 18, le premier test sur l’âge est vrai et le second est faux.
Tenir compte des minuscules écarts entre flottants
De nombreuses fractions décimales n’ont qu’une représentation binaire approchée. Python stocke 0.1 + 0.2 sous la forme 0.30000000000000004 : 0.1 + 0.2 == 0.3 vaut donc False.
Pour une comparaison avec une tolérance absolue de 1e-9, utilise :
print(abs((0.1 + 0.2) - 0.3) < 1e-9)
abs() donne la valeur absolue de la différence. Cette différence est inférieure à un milliardième : le test affiche donc True. La tolérance indique l’écart accepté par cette vérification ; il ne s’agit pas d’une égalité exacte.
Points clés
- Les comparaisons produisent les valeurs booléennes
TrueetFalse. =affecte une valeur ;==compare des valeurs sans les modifier.- Choisis
<ou<=, et>ou>=, selon que la limite est incluse ou non. - Les calculs arithmétiques précèdent la comparaison :
n % 2 == 0teste donc si un nombre est pair. - Pour des flottants calculés, un test avec une tolérance peut être nécessaire à la place d’une égalité exacte.
1.2 Texte, nombres saisis et intervalles
Les valeurs de part et d’autre d’une comparaison comptent autant que l’opérateur. Un texte peut ressembler à un nombre tout en suivant les règles des chaînes.
Comparer le texte exactement
L’égalité de chaînes vérifie chaque caractère, y compris la casse et les espaces. "yes" == "Yes" vaut False, et "yes" == "yes " vaut aussi False. Pour accepter les différences courantes de majuscules et les espaces autour du texte, compare une copie nettoyée :
answer = " Yes "
print(answer.strip().lower() == "yes")
strip() supprime les caractères d’espacement aux deux extrémités. lower() met les lettres en minuscules. Le texte nettoyé est "yes" : le résultat vaut donc True. La valeur stockée dans answer reste inchangée, sauf si tu lui affectes la valeur nettoyée.
Comprendre l’ordre des chaînes
Python compare les chaînes de gauche à droite à l’aide des points de code Unicode, les nombres attribués aux caractères. Il s’arrête à la première paire inégale. Avec des lettres anglaises non accentuées de même casse, cela suit l’ordre alphabétique : "apple" < "banana" vaut True. Lorsqu’une chaîne forme le début de l’autre, la plus courte vient en premier : "cat" < "catalog" vaut True.
Ce n’est pas une règle complète de classement de dictionnaire. Les lettres de A à Z ont les points de code 65 à 90 et celles de a à z ont les points de code 97 à 122. Ainsi, "Zebra" < "apple" vaut True. Le é accentué vient aussi après z, donc "zebra" < "éclair" vaut True.
Les chiffres dans les chaînes suivent la même règle de comparaison des caractères. "10" < "9" vaut True : la première comparaison porte sur "1" et "9", et non sur les nombres dix et neuf.
Convertir les saisies pour prendre des décisions numériques
input() renvoie une chaîne. Si quelqu’un saisit 5, "5" == 5 donne False : le test d’égalité ne convertit pas le texte. Une comparaison d’ordre se comporte autrement : "5" < 10 provoque une TypeError car Python ne peut pas comparer l’ordre de cette chaîne et de cet entier.
age = int(input("Age: "))
print(age >= 18)
Pour le texte saisi "18", int() produit l’entier 18 et le test affiche True. Utilise float() lorsque la saisie représente une valeur décimale.
Utiliser une chaîne de comparaisons pour un intervalle
0 <= score <= 100 exige que les deux comparaisons entre valeurs voisines soient vraies. Cela signifie 0 <= score and score <= 100. Pour score = 105, le test de la borne inférieure réussit, mais celui de la borne supérieure échoue : toute la chaîne vaut donc False.
| Règle | Test Python |
|---|---|
| De 1 à 10, les deux bornes incluses | 1 <= x <= 10 |
| Strictement entre 1 et 10 | 1 < x < 10 |
Une chaîne ne compare que les valeurs voisines. 1 < 3 > 2 vaut True car 1 < 3 et 3 > 2 sont tous deux vrais ; elle ne compare pas directement 1 à 2.
Choisir l’appartenance ou l’identité au besoin
Les opérateurs d’appartenance vérifient si un texte apparaît dans un autre. "nan" in "banana" vaut True ; "Ban" in "banana" vaut False. "x" not in "banana" vaut True.
None représente une absence de valeur. Vérifie-la avec result is None ou result is not None. L’opérateur is demande s’il s’agit exactement du même objet, tandis que == demande si les valeurs sont égales. Utilise == pour vérifier l’égalité de nombres et de chaînes : un test d’identité comme x is 5 n’est pas fiable à cette fin et produit un SyntaxWarning.
Points clés
- Les comparaisons de chaînes sont sensibles à la casse et tiennent compte des espaces.
- Convertis les chiffres saisis avec
int()oufloat()avant les comparaisons numériques. - Dans une comparaison chaînée d’intervalle, chaque comparaison entre valeurs voisines doit réussir.
inteste l’appartenance ;is Noneteste la présence du marqueur d’absence de valeur.
2Choisir le code qui s’exécute
Une comparaison devient utile lorsqu’elle contrôle une action. Python indique chaque choix par une condition et un bloc indenté : la disposition montre donc quelles lignes s’exécutent ensemble. Commence par un bloc qui peut être ignoré, donne-lui ensuite une alternative, puis choisis parmi plusieurs cas. L’essentiel est de suivre le programme dans l’ordre : une ligne ultérieure peut utiliser une valeur définie par une branche précédente, et un test ultérieur d’une même chaîne peut ne jamais être atteint.
2.1 L’en-tête if et son bloc
Une instruction if n’exécute un bloc que lorsque sa condition est vraie. L’en-tête commence par if, indique la condition et se termine par deux-points. Les lignes situées en dessous sont indentées pour montrer qu’elles appartiennent à son corps.
Suivre une décision à une branche
temperature = 31
if temperature > 30:
print("Hot day")
print("Drink water")
print("Done")
À l’en-tête, Python lit la valeur actuelle de temperature. La comparaison 31 > 30 vaut True, donc les deux lignes indentées s’exécutent. Le programme atteint ensuite la ligne située hors du bloc. Sa sortie est :
Hot day
Drink water
Done
Remplace la première ligne par temperature = 25. Maintenant, 25 > 30 vaut False : Python ignore donc tout le corps. Seul Done s’affiche. La condition est testée une fois lorsque Python atteint l’en-tête ; un if ne la vérifie pas en continu.
Montrer l’appartenance par l’indentation
Par convention, utilise 4 espaces pour chaque niveau d’indentation. Les lignes au même niveau appartiennent au même bloc. Le retour au niveau extérieur met fin au bloc. Si tu indentes print("Done") de 4 espaces, cette instruction entre dans le corps du if et ne s’affiche que lorsque la condition est satisfaite.
Un algorigramme représente le même choix par un losange. Le chemin « vrai » entre dans le corps, le chemin « faux » le contourne et les chemins se rejoignent à l’instruction suivante, hors du bloc.
| Problème | Correction |
|---|---|
| Deux-points manquants | Termine l’en-tête par :. |
| Corps non indenté | Indente les lignes contrôlées par if. |
| Indentation incohérente | Aligne les instructions qui appartiennent au même bloc. |
| Mélange de tabulations et d’espaces | Configure l’éditeur pour insérer des espaces. |
Python peut signaler SyntaxError, IndentationError ou TabError pour ces problèmes. Commence par examiner l’en-tête et l’indentation autour de la ligne signalée. Les parenthèses autour de la condition sont facultatives ; if temperature > 30: est la forme habituelle.
Un corps ne peut pas être vide. Pour réserver la place d’une action, écris un pass indenté. C’est une instruction valide qui ne fait rien :
if temperature > 30:
pass
Les vérifications séparées sont indépendantes
score = 95
if score >= 50:
print("Pass")
if score >= 90:
print("Excellent")
Python atteint les deux en-têtes. Les deux conditions sont vraies : il affiche donc les deux messages. Des instructions if séparées conviennent aux règles dont toutes les actions peuvent s’appliquer à une même entrée.
Donner au code ultérieur une valeur utilisable
Un nom auquel une valeur n’est affectée que dans le corps peut ne jamais être créé :
x = 0
if x > 0:
message = "positive"
print(message)
Dans un nouveau script, le corps est ignoré et message n’a pas de valeur : la dernière ligne provoque donc une NameError. Une solution consiste à fournir une valeur initiale avant le choix :
x = 0
message = "not positive"
if x > 0:
message = "positive"
print(message)
La ligne ultérieure dispose maintenant d’une valeur sur les deux chemins. Pour zéro, elle affiche not positive ; pour un x positif, le corps remplace ce texte par positive.
Points clés
- Un en-tête
ifse termine par:, suivi d’un corps indenté. - Une condition fausse fait ignorer tout le corps ; l’exécution continue après celui-ci.
- Les instructions
ifséparées sont chacune testées lorsqu’elles sont atteintes. - Utilise une valeur initiale ou affecte une valeur dans chaque branche avant de lire une variable ultérieurement.
passfournit un corps valide qui ne fait rien.
2.2 Deux chemins et une valeur à choisir
Une instruction if–else choisit l’un de deux blocs. Lorsque la condition est vraie, Python exécute le corps du if. Sinon, il exécute le corps du else. Exactement l’un des deux s’exécute lorsque l’exécution atteint cette décision.
Aligner les alternatives
number = int(input("Enter a whole number: "))
if number % 2 == 0:
print(number, "is even")
else:
print(number, "is odd")
Pour la saisie 14, le reste est 0 : la sortie est donc 14 is even. Pour la saisie -7, le reste est 1 : la sortie est donc -7 is odd. Le else appartient au if situé au même niveau d’indentation. Son corps possède sa propre indentation.
Il n’y a pas de condition après else : cela signifie que la condition précédente était fausse. else number < 0: est une erreur de syntaxe. Place la clause directement après le corps du if ; une instruction non indentée et sans rapport entre les deux rompt la structure.
Vérifier ce que comprend « tout le reste »
Avec if answer == "yes":, un else ne signifie pas seulement "no". Il accepte aussi "maybe", "Yes" et "", car aucune de ces valeurs n’est égale à "yes". C’est utile lorsque toutes les autres entrées appellent la même action. Si plusieurs entrées rejetées appellent des réponses différentes, il faut d’autres tests.
Affecter une valeur sur les deux chemins
Une règle prévoit la livraison gratuite pour les totaux d’au moins 50 € et facture 5,99 € dans les autres cas :
total = 42.50
if total >= 50:
shipping = 0
else:
shipping = 5.99
print(total + shipping)
D’abord, 42.50 >= 50 donne False. Python ignore l’affectation de 0, exécute le else et stocke 5.99. La dernière ligne est hors des deux corps et affiche 48.49. Remplace total par 60 : le premier corps stocke 0, l’autre est ignoré et la dernière ligne affiche 60. Les deux chemins définissent shipping avant son utilisation.
Choisir une valeur avec une expression conditionnelle
Lorsque la seule différence est la valeur à affecter, une expression conditionnelle peut l’exprimer en une ligne :
shipping = 0 if total >= 50 else 5.99
Sa forme est value_if_true if condition else value_if_false. Bien que la valeur correspondant au cas vrai apparaisse en premier sur la page, Python évalue d’abord la condition. Il évalue uniquement la valeur choisie, puis affecte le résultat à shipping.
Un autre exemple est label = "even" if n % 2 == 0 else "odd". Pour n = 14, il sélectionne "even". Pour n = -7, il sélectionne "odd".
| Besoin | Forme adaptée |
|---|---|
| Plusieurs actions sur l’un ou l’autre chemin | Blocs if–else complets |
| Une valeur parmi deux | Expression conditionnelle |
L’expression nécessite les deux valeurs. x = 1 if flag est incomplet et provoque une SyntaxError car il n’y a pas de valeur après else. Une instruction if complète peut omettre else car elle peut simplement ne rien faire sur le chemin où la condition est fausse ; une expression doit tout de même produire une valeur.
Points clés
else:n’a pas de condition et s’aligne sur sonif.- Un
elsecouvre toutes les entrées rejetées par la condition. - Affecter une valeur à la même variable dans les deux corps la rend disponible après l’un ou l’autre chemin.
- Une expression conditionnelle a la forme
a if condition else bet n’évalue que la valeur sélectionnée.
2.3 Plusieurs cas dans un ordre réfléchi
Utilise elif, abréviation de « else if », pour ajouter un test à une décision. Python essaie les conditions de haut en bas. La première condition vraie l’emporte et le reste de la chaîne est ignoré.
Suivre une décision sur une note
score = 85
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
elif score >= 60:
grade = "D"
else:
grade = "F"
print(grade)
Le premier test, 85 >= 90, est faux. Le deuxième, 85 >= 80, est vrai : Python stocke donc "B". Il ne teste pas les conditions restantes et n’entre pas dans else. La sortie est B.
| Score | Premier chemin qui réussit | Note |
|---|---|---|
90 | score >= 90 | A |
89 | score >= 80 | B |
60 | score >= 60 | D |
59 | else final | F |
Utiliser les résultats des échecs précédents
Atteindre elif score >= 80: t’indique déjà que le score est inférieur à 90. Pour des scores entiers, cette branche couvre les valeurs de 80 à 89. Ajouter and score < 90 répéterait une vérification que le programme a déjà effectuée.
L’ordre compte car ces intervalles se chevauchent. Si score >= 60 vient en premier, il retient 85 et 95 avant que les tests des notes supérieures ne soient atteints. Pour des tests de borne inférieure avec >=, place le seuil le plus élevé en premier. Pour des tests de borne supérieure avec <, commence par le seuil le plus bas.
Garder un choix dans une seule chaîne
Remplacer les mots-clés elif par if change le comportement. Avec un score de 85, le test de 80 affecte "B", celui de 70 affecte ensuite "C" et celui de 60 affecte "D". La valeur finale est "D". Chaque nouveau if commence une décision indépendante.
Cette distinction concerne aussi else. Dans un groupe d’instructions if séparées, un else final appartient uniquement au if qui lui correspond, et non au groupe entier. Garde les branches liées lorsqu’elles représentent une seule classification.
Prévoir les limites et les entrées sans correspondance
Une chaîne elif peut comporter autant de tests supplémentaires que nécessaire et son else final est facultatif. Sans branche par défaut, elle peut n’exécuter aucun corps :
temp = 20
if temp < 18:
print("Cool")
elif temp > 24:
print("Warm")
Aucune des deux conditions n’est satisfaite. Ajoute else: avec un print("Comfortable") indenté si chaque température doit produire un message. De même, t < 18 suivi de t > 18 laisse exactement 18 sans correspondance. Aux seuils des notes, écrire score > 90 enverrait 90 dans la branche "B".
Les menus textuels utilisent la même structure : teste choice == "1", puis choice == "2", et donne une réponse "Unknown option" à toute autre saisie. Ces vérifications comparent des chaînes car input() renvoie du texte. Lorsque de nombreux tests comparent une valeur à des choix fixés, match offre une autre façon de structurer la décision.
Points clés
- Seule la première branche vraie d’une chaîne
if–elifs’exécute. - Les tests précédents qui sont faux réduisent les entrées susceptibles d’atteindre une branche ultérieure.
- Ordonne les seuils qui se chevauchent pour qu’un test large ne masque pas un cas plus restreint.
- Des instructions
ifséparées peuvent exécuter plusieurs corps et remplacer des valeurs affectées précédemment. - Un
elsefinal traite les entrées qui ne satisfont aucun des tests. - Teste les seuils exacts pour trouver les cas non couverts et les erreurs de décalage d’une unité.
3Combiner des tests sans changer la règle
Les décisions réelles dépendent souvent de plusieurs faits à la fois : un intervalle a deux bornes et un accès peut nécessiter à la fois une autorisation et une place disponible. Les opérateurs booléens réunissent ces faits dans une seule condition. Leur regroupement et leur ordre d’évaluation comptent aussi, car Python peut s’arrêter avant d’atteindre une partie d’un test. Traduis d’abord la règle, puis suis l’expression de gauche à droite en gardant visibles les parenthèses et les calculs ignorés.
3.1 Les deux, l’un ou l’autre et l’opposé
Les opérateurs booléens and, or et not permettent de construire une condition à partir de conditions plus simples. Python les écrit sous forme de mots en minuscules.
Lire toutes les possibilités
Pour des entrées booléennes, and donne True uniquement lorsque les deux entrées sont vraies. or donne True lorsqu’au moins l’une est vraie, y compris lorsque les deux sont vraies. C’est un ou inclusif.
A | B | A and B | A or B |
|---|---|---|---|
True | True | True | True |
True | False | False | True |
False | True | False | True |
False | False | False | False |
not inverse une valeur de vérité : not True donne False et not False donne True. Une table de vérité présente toutes les combinaisons d’entrées booléennes. Deux entrées nécessitent quatre lignes ; trois en nécessitent huit. Chaque entrée booléenne indépendante supplémentaire double le nombre de combinaisons.
Pour A and not B, inverse d’abord B, puis combine le résultat avec A. Dans la ligne A = True, B = False, not B vaut True, donc le résultat vaut True. Les trois autres lignes donnent False.
Traduire une règle en tests complets
Un musée accorde une réduction sur l’entrée aux visiteurs de moins de 12 ans ou âgés de 65 ans et plus :
has_discount = age < 12 or age >= 65
À 10 ans, la première comparaison réussit. À 65 ans, la seconde réussit. Les âges 30 et 64 ne satisfont aucune des deux. Utiliser and exigerait qu’un même âge soit inférieur à 12 et au moins égal à 65, ce qui est impossible.
Une attraction exige une taille d’au moins 120 centimètres et l’absence de problème cardiaque :
can_ride = height >= 120 and not has_heart_condition
Les deux exigences doivent être satisfaites ensemble. À la taille minimale avec has_heart_condition = False, les deux parties sont satisfaites. Si l’une des exigences échoue, can_ride vaut False.
Distinguer l’intérieur de l’extérieur d’un intervalle
| Sens | Test |
|---|---|
| Entre 0 et 100 inclus | score >= 0 and score <= 100 |
| En dehors de 0 à 100 | score < 0 or score > 100 |
Le test de l’intérieur nécessite les deux bornes. Le test de l’extérieur nécessite que l’une ou l’autre soit dépassée. score < 0 and score > 100 ne peut jamais être vrai pour un même nombre.
Chaque comparaison doit avoir deux côtés. score >= 0 and <= 100 est une syntaxe incomplète. Un problème plus subtil s’exécute sans erreur :
if answer == "y" or "yes":
print("Accepted")
Python voit (answer == "y") or "yes". Lorsque la comparaison est fausse, la chaîne non vide "yes" suffit à donner une valeur vraie à la condition. Répète la comparaison : answer == "y" or answer == "yes".
Les formulations courantes demandent autant d’attention. « Fermé le samedi et le dimanche » signifie day == "Saturday" or day == "Sunday" ; un même jour n’a pas besoin de porter les deux noms à la fois. Pour une variable booléenne, utilise directement la négation not is_member. Une comparaison niée comme not (age >= 18) peut aussi s’écrire plus simplement age < 18. Les opérateurs Python employés ici sont des mots, et non &&, || ou !.
Points clés
andexige que les deux entrées booléennes soient vraies ; leorinclusif exige qu’au moins l’une d’elles soit vraie.notinverse une valeur de vérité et produit toujours un booléen.- Pour l’intérieur d’un intervalle, il faut
and; pour l’extérieur, il fautor. - Répète la comparaison complète de chaque côté d’un opérateur booléen.
- Une table de vérité vérifie chaque combinaison, y compris le cas où les deux entrées sont vraies.
3.2 Regroupement, calculs ignorés et négation
Une condition plus longue soulève deux questions : comment ses parties sont regroupées et lesquelles Python évalue effectivement. La priorité des opérateurs répond à la première. L’évaluation en court-circuit répond à la seconde.
Lire d’abord le regroupement
Pour les opérateurs utilisés ici, voici l’ordre de priorité, de la plus forte à la plus faible :
- Élévation à la puissance :
**. - Multiplication, division, division entière, reste :
*,/,//,%. - Addition et soustraction :
+,-. - Comparaisons, notamment
in,not in,isetis not. not, puisand, puisor.- L’expression conditionnelle :
a if condition else b.
Les parenthèses modifient le regroupement. Par exemple, x > 3 or x < 0 and x != 5 se regroupe ainsi : x > 3 or (x < 0 and x != 5). Pour x = 5, la comparaison de gauche est vraie et tout le groupe de droite est ignoré. Le résultat est True.
Avec (x > 3 or x < 0) and x != 5, les parenthèses font du premier groupe un opérande de and. Pour x = 5, ce groupe est vrai, mais x != 5 est faux : le résultat est donc False.
C’est pourquoi is_weekend or is_holiday and is_sunny accepte tous les week-ends, même sous la pluie. Pour la règle « un jour de repos où il fait aussi beau », écris (is_weekend or is_holiday) and is_sunny.
Suivre l’évaluation de gauche à droite
| Expression | Quand Python ignore B |
|---|---|
A and B | A est une valeur fausse |
A or B | A est une valeur vraie |
Pour and, une première partie fausse a déjà rendu l’ensemble de la condition impossible à satisfaire. Pour or, une première partie vraie l’a déjà satisfaite. La priorité n’oblige pas Python à calculer un opérande ignoré simplement parce qu’il contient des opérateurs plus prioritaires.
Tu peux t’en servir pour placer une condition de garde avant une opération qui échouerait :
count = 0
total = 50
is_large_average = count != 0 and total / count > 10
print(is_large_average)
count != 0 est faux : Python ne tente donc jamais 50 / 0. Il stocke et affiche False. Inverser les opérandes tente d’abord la division et provoque une ZeroDivisionError ; la vérification ultérieure ne peut pas protéger une opération précédente.
Faire passer not à travers un test regroupé
Les lois de De Morgan réécrivent une négation en inversant chaque partie et en changeant l’opérateur qui les relie :
| Forme initiale | Forme équivalente |
|---|---|
not (A and B) | not A or not B |
not (A or B) | not A and not B |
« Ne pas être adolescent » peut être testé avec not (age >= 13 and age <= 19). Le test direct équivalent est age < 13 or age > 19. Les âges 12 et 20 satisfont le test ; 13, 16 et 19 ne le satisfont pas.
Conserver and après avoir nié les deux parties change la règle. Pour A = True, B = False, not (A and B) est vrai, mais not A and not B est faux. Compare chaque ligne des tables de vérité pour vérifier l’équivalence de deux formes booléennes.
Pour une variable qui contient déjà un booléen, écris if is_valid: ou if not is_valid:. La comparer à True ou False ajoute un test dont la condition n’a pas besoin.
Points clés
- La priorité regroupe une expression ; l’évaluation en court-circuit détermine quels opérandes sont atteints.
andignore son opérande droit après un opérande gauche faux ;orl’ignore après un opérande gauche vrai.- Place une condition de garde avant l’opération qu’elle protège.
- Les lois de De Morgan nient les deux parties et remplacent
andparor, ou inversement. - Utilise des parenthèses pour montrer le regroupement voulu lorsque tu mélanges
andetor. - Teste directement les variables booléennes avec leur nom ou avec
not.
4Rendre les décisions faciles à suivre et à tester
Une décision peut dépendre d’une autre décision, et une valeur peut servir de condition sans comparaison explicite. Ces deux possibilités raccourcissent les scripts, mais elles créent aussi des chemins faciles à oublier. L’indentation montre quelles vérifications dépendent des choix précédents ; la valeur de vérité explique comment se comportent le texte vide et zéro. Suivre ces chemins et tester les valeurs limites exactes permet de trouver des réponses manquantes, des valeurs écrasées et des branches qu’aucune entrée ne peut atteindre.
4.1 Des décisions dans d’autres branches
Une instruction conditionnelle imbriquée place une décision dans une branche d’une autre décision. La décision interne n’est atteinte que lorsque l’exécution entre dans cette branche externe. Chaque niveau d’imbrication ajoute 4 espaces d’indentation.
Suivre le choix externe avant le choix interne
has_ticket = True
age = 15
if has_ticket:
if age >= 13:
print("Enjoy the movie")
else:
print("This movie needs an adult")
else:
print("Please buy a ticket first")
D’abord, has_ticket est vrai : Python entre donc dans le corps externe. Il teste ensuite 15 >= 13, obtient vrai et affiche Enjoy the movie. Les corps des else interne et externe sont tous deux ignorés.
Remplace l’âge par 10 tout en gardant le billet. Python entre toujours dans le corps externe, mais la condition interne échoue : il affiche donc This movie needs an adult. Avec has_ticket = False, le test de l’âge n’est jamais atteint ; le else externe affiche Please buy a ticket first.
Associer chaque else grâce à l’indentation
Un else appartient au if situé à son propre niveau d’indentation. Le déplacer peut changer le comportement même si le script reste valide. Considère cette variante plus courte :
if has_ticket:
if age >= 13:
print("Enter")
else:
print("Buy a ticket")
Le else appartient à if has_ticket:. Un enfant de 10 ans avec un billet ne reçoit aucun message. Déplace ce else et son corps d’un niveau vers l’intérieur : il appartient alors à if age >= 13:. Le même enfant reçoit maintenant Buy a ticket, tandis qu’une personne sans billet ne reçoit aucun message. La nouvelle disposition exprime une règle différente.
Dans l’exemple complet du film, le if interne possède déjà un else. Déplacer le else externe vers l’intérieur créerait deux alternatives pour le même if et provoquerait une erreur de syntaxe.
Aplatir deux exigences
Lorsqu’il n’y a qu’une seule action et qu’aucun des deux niveaux n’a de else, and supprime souvent un niveau d’imbrication :
if is_member and total >= 50:
print("Free shipping")
Cela exécute la même action qu’un if is_member: externe contenant un if total >= 50: interne. Les deux exigences doivent être satisfaites et la seconde n’est atteinte qu’après la réussite de la première. Garde l’imbrication lorsque les branches externes nécessitent leurs propres actions distinctes, comme pour l’achat d’un billet.
Un else dont la seule action est un autre if–else peut devenir une chaîne elif. Pour les cas positif, négatif et zéro, la forme aplatie est if x > 0:, puis elif x < 0:, puis else:. Elle conserve les mêmes trois résultats avec moins d’indentation.
Valider avant de classer
Une décision sur une note doit rejeter les scores hors de l’intervalle autorisé avant d’attribuer une lettre :
if 0 <= score <= 100:
if score >= 90:
print("A")
else:
print("Below A")
else:
print("Score must be between 0 and 100")
Pour score = 150, la vérification externe échoue : aucune note n’est donc attribuée. L’imbrication révèle aussi les chemins impossibles : un if x < 5: interne sous if x > 10: ne peut jamais réussir. Lorsque l’indentation devient profonde, cherche des exigences à combiner, une chaîne elif ou une vérification préalable qui rend les chemins restants plus clairs.
Points clés
- Une condition interne n’est testée qu’après l’entrée dans sa branche externe.
- L’indentation détermine à quel
ifappartient unelse. - Deux exigences imbriquées avec une seule action et sans alternative peuvent devenir une seule condition avec
and. - Valide l’intervalle autorisé avant d’attribuer une catégorie.
- Des exigences interne et externe contradictoires créent du code inaccessible.
4.2 Valeurs vides, zéro et valeurs utilisées comme conditions
Python peut tester directement une valeur dans une condition. Sa valeur de vérité détermine si le corps s’exécute. Cela évite des comparaisons, mais la valeur de vérité peut différer de ce que son texte semble dire.
Reconnaître les valeurs fausses
Pour les types natifs présentés ici, False, None, zéro numérique, les chaînes vides et les collections vides sont des valeurs fausses. Les nombres non nuls et les chaînes ou collections non vides sont des valeurs vraies.
| Valeur | bool(value) | Pourquoi |
|---|---|---|
0, 0.0 | False | Zéro numérique |
-3 | True | Nombre non nul |
"" | False | Chaîne vide |
" " | True | Contient un espace |
"0", "False", "no" | True | Chaînes non vides |
None | False | Marqueur d’absence de valeur |
[], (), {} | False | Collections vides |
bool() convertit une valeur en sa valeur de vérité booléenne. Dans une condition, if value: choisit la même branche que if bool(value):. Cette instruction ne transforme pas la valeur stockée en booléen.
Tester une saisie vide sans se tromper
name = input("Name: ")
if name:
print("Hello", name)
else:
print("No name entered")
Appuyer sur Entrée sans rien saisir donne "" : le second corps s’exécute donc. Un nom composé uniquement d’espaces n’est pas vide et satisfait le premier test. if name.strip(): teste plutôt le texte après suppression des caractères d’espacement autour de lui : une réponse composée uniquement d’espaces échoue donc aussi.
Une réponse par oui ou par non appelle une autre question. if answer: s’exécute pour "no" et "False" car les deux contiennent des caractères. Pour reconnaître une réponse affirmative, compare le texte, par exemple avec answer == "yes". La valeur de vérité vérifie si la chaîne est vide, et non le sens d’un mot.
Distinguer un zéro valide de données manquantes
Supposons que quantity vaille None avant qu’une valeur soit fournie et puisse valablement être 0. if quantity: rejette les deux. Utilise quantity is not None pour demander si une valeur est présente ; ce test accepte zéro.
Pour une véritable variable booléenne, un test direct est clair. Pour les autres valeurs, x == True fait autre chose que if x:. Avec x = 5, le test de valeur de vérité réussit, mais 5 == True est faux ; l’égalité numérique considère que True est égal à 1, et non à tout nombre non nul.
and et or renvoient une valeur examinée
Ces opérateurs renvoient un opérande, qui peut ne pas être un booléen :
| Expression | Valeur renvoyée |
|---|---|
"" or "Guest" | "Guest" |
"Ana" or "Guest" | "Ana" |
0 and 5 | 0 |
3 and 5 | 5 |
Pour or, Python renvoie la valeur de gauche si elle est vraie ; sinon, il évalue et renvoie la valeur de droite. Pour and, il renvoie la valeur de gauche si elle est fausse ; sinon, il évalue et renvoie la valeur de droite.
display_name = name or "Guest" fournit une valeur par défaut pour une saisie vide. Le même schéma avec quantity or 1 remplace un zéro réel par 1. Utilise une valeur par défaut de cette façon uniquement lorsque toute valeur fausse signifie qu’une valeur manque. not se comporte autrement : il renvoie toujours True ou False. Si un drapeau stocké doit être booléen, has_name = bool(name or nickname) convertit le texte sélectionné en valeur de vérité.
Points clés
- Les conteneurs et textes natifs vides, zéro,
NoneetFalsesont des valeurs fausses. - Les chaînes non vides restent des valeurs vraies même lorsqu’elles contiennent
"0"ou"False". - Utilise
is not Nonelorsque zéro est une valeur valide fournie. andetorrenvoient des opérandes ;notrenvoie toujours un booléen.- Une valeur par défaut avec
orremplace toute valeur fausse à gauche, y compris zéro. strip()vide une saisie composée uniquement d’espaces avant de la tester.
4.3 Suivre les chemins et tester les limites
Un script peut s’exécuter sans erreur de syntaxe tout en choisissant la mauvaise branche. Le traçage consiste à suivre une exécution à la main. Les tests consistent à exécuter le programme avec des entrées choisies et à comparer le résultat observé à celui qu’exige la règle.
Préparer et suivre un chemin
Avant d’écrire du code, énonce les choix sous forme d’étapes en langage courant, ou pseudo-code. Un algorigramme place chaque condition dans un losange avec des flèches « vrai » et « faux ». Les deux chemins doivent mener clairement à une étape suivante ou à une fin.
Pour suivre le code, note les valeurs initiales, évalue chaque condition atteinte, consigne les affectations et copie exactement la sortie. Pour la chaîne des notes avec score = 72 :
| Condition atteinte | Résultat | Action |
|---|---|---|
score >= 90 | False | Passer au test suivant |
score >= 80 | False | Passer au test suivant |
score >= 70 | True | Donner à grade la valeur "C" |
| Reste de la chaîne | Non évalué | Continuer après la chaîne |
« Non évalué » ne signifie pas faux. Python a déjà sélectionné une branche : il n’a donc pas besoin des comparaisons suivantes.
Couvrir chaque branche et chaque limite
Une chaîne à quatre branches nécessite au moins quatre entrées pour exécuter chaque branche une fois. Choisis-les selon les chemins prévus, et non selon la variété apparente des nombres. Plusieurs scores élevés peuvent tous exercer le même premier corps.
La couverture des branches peut à elle seule laisser passer une limite incorrecte. Pour age >= 18, teste 17, 18 et 19. Un > erroné réussit les deux tests de part et d’autre comme prévu, mais rejette la valeur limite elle-même. Pour un seuil de note de 90, compare 89, 90 et 91 ; fais de même pour les autres seuils. Pour des entrées décimales, choisis des valeurs proches adaptées à la précision de la mesure.
Trouver les branches qui ne peuvent pas s’exécuter
if score >= 60:
print("Pass")
elif score >= 90:
print("Excellent")
La seconde branche est inaccessible. Tout score d’au moins 90 a déjà satisfait le premier test. Place le seuil le plus restrictif en premier ou modifie les intervalles pour qu’ils correspondent à la règle voulue.
Un cas non couvert laisse un cas prévu sans traitement : t < 0 suivi de t > 0 ignore zéro. Un chevauchement peut faire exécuter plusieurs actions indépendantes : les tests séparés t >= 0 et t <= 10 réussissent tous deux pour 5. Une chaîne ne permet d’exécuter que sa première branche vraie, mais son ordre détermine toujours quelle condition l’emporte en cas de chevauchement.
Inclure les entrées difficiles
Teste les valeurs négatives, zéro, le texte vide et les réponses en majuscules lorsque le script attend des minuscules. Si seuls "y" et "n" sont acceptés, donne à tout autre texte une réponse claire comme "Please answer y or n".
Lorsqu’un test se comporte de façon inattendue, examine la valeur et son type avant d’évaluer la comparaison suspecte :
print(repr(age), type(age))
Pour age = "18", cela affiche '18' <class 'str'>. Convertis le texte avant d’essayer age >= 18 ; placer la comparaison incorrecte dans ce même print() de débogage provoquerait une TypeError avant l’affichage du diagnostic. Pour les problèmes de structure, examine l’indentation et le message d’erreur de syntaxe.
Enfin, une comparaison peut définir directement un drapeau booléen : is_adult = age >= 18. Elle remplace deux branches dont les seules affectations sont True et False. Utilise bool() lorsque l’expression sous-jacente peut renvoyer un autre type de valeur.
Points clés
- Suis uniquement les conditions que le programme atteint et note les tests ignorés comme tels.
- Teste chaque branche ainsi que la valeur limite et les valeurs proches de chaque limite.
- Des tests larges placés en premier peuvent rendre des branches ultérieures inaccessibles.
- Vérifie les cas non couverts, les chevauchements et les entrées inattendues au regard de la règle voulue.
- Examine la valeur et son type avant d’évaluer une comparaison qui peut échouer.
5Choisir des cas avec match
Les menus et les commandes comparent souvent une valeur à plusieurs choix fixés. Une instruction match présente ces choix sous forme de motifs et exécute le premier cas correspondant. Les valeurs littérales, les alternatives et un motif attrape-tout final permettent de traiter de nombreux menus simples. Les captures et les gardes apportent de la souplesse, mais un nom dans un motif ne se comporte pas comme un nom dans une comparaison. Comprendre cette distinction évite qu’un cas accepte accidentellement toutes les entrées.
5.1 Valeurs fixées, alternatives et cas par défaut
Une instruction match, disponible dans Python 3.10 et les versions ultérieures, compare une valeur à une série de motifs. Cette valeur est le sujet. Chaque case fournit un motif et un corps indenté.
Suivre le premier cas correspondant
command = "stop"
match command:
case "start":
print("Starting")
case "stop":
print("Stopping")
case _:
print("Unknown command")
print("Ready")
Le sujet est "stop". Il ne correspond pas à "start", donc Python essaie le cas suivant. "stop" correspond et le corps affiche Stopping. Python quitte ensuite toute l’instruction match et affiche Ready. Un seul corps de cas s’exécute ; l’exécution ne se poursuit pas dans le corps suivant et aucun break n’est nécessaire.
Un sujet égal à "jump" atteint le motif attrape-tout final, _, qui accepte toute valeur. La sortie est Unknown command, puis Ready. Sans ce cas, un sujet sans correspondance n’exécute simplement aucun corps de cas et l’exécution continue après l’instruction.
Respecter la disposition et l’ordre du cas par défaut
Les en-têtes case sont indentés de 4 espaces sous match, et leurs corps de 4 espaces supplémentaires. Chaque en-tête se termine par deux-points. Un case _: sans garde doit être placé en dernier, car il accepte tout. Placer d’autres cas après lui provoque une SyntaxError : ces motifs ultérieurs ne pourraient jamais être atteints.
Un motif attrape-tout avec une garde peut apparaître plus tôt, car sa condition supplémentaire peut échouer. Une instruction match dans un script à exécution linéaire ne peut pas non plus contenir break ; cette instruction nécessite une boucle englobante.
Comprendre la correspondance des littéraux
Un motif littéral utilise un nombre fixé, une chaîne, True, False ou None. Les motifs de chaîne sont exacts et sensibles à la casse : "stop" ne correspond pas à "Stop". Les motifs numériques utilisent l’égalité : case 1: correspond donc à 1, 1.0 et True, qui est égal à 1.
Les motifs True, False et None utilisent quant à eux l’identité. Ainsi, case True: correspond au booléen True, mais pas à l’entier 1. L’ordre des motifs compte si un cas numérique et un cas booléen peuvent tous deux accepter le sujet.
Relier des alternatives fixées par une barre
Un motif OU relie des alternatives avec | :
day = int(input("Day number: "))
match day:
case 6 | 7:
print("Weekend")
case 1 | 2 | 3 | 4 | 5:
print("Weekday")
case _:
print("Not a day number")
Pour 6, le premier corps s’exécute ; pour 3, le deuxième s’exécute ; pour 9, le motif attrape-tout s’exécute. Sans int(), la saisie "6" reste une chaîne et ne correspond pas au nombre 6.
Utilise le séparateur de motifs |, et non le mot booléen or. case "y" or "yes": est invalide ; case "y" | "yes": est valide.
| Décision | Choix de départ clair |
|---|---|
| Un sujet comparé à de nombreuses valeurs fixées | match |
Intervalles comme score >= 90 | if–elif |
| Conditions portant sur différentes variables | if–elif |
Pour des commandes fixées, une chaîne if–elif fondée sur l’égalité peut produire les mêmes sorties. Choisis la disposition qui rend les cas les plus faciles à lire.
Points clés
matchnécessite Python 3.10 ou une version ultérieure et n’exécute que le premier cas correspondant.- Un motif attrape-tout
_sans garde accepte tout et doit être placé en dernier. - Utilise
|pour relier des motifs alternatifs. - Les littéraux de chaîne et les littéraux numériques correspondent par égalité ; les motifs
True,FalseetNoneutilisent l’identité. - Les sujets sans correspondance n’exécutent aucun corps en l’absence de cas par défaut.
- Utilise
matchpour les choix fixés etif–elifpour les tests d’intervalle ordinaires.
5.2 Captures, gardes et valeurs nommées
Les motifs peuvent faire plus que vérifier un littéral fixé. Un motif peut donner un nom au sujet et une garde peut vérifier une condition supplémentaire avant que le cas soit accepté.
Capturer d’abord, puis vérifier la garde
Un motif de capture est un nom seul comme n. Il accepte tout sujet et l’affecte à ce nom. Une garde suit le motif sous la forme if condition ; le corps ne s’exécute que si le motif correspond et que la garde est vraie.
temperature = -5
match temperature:
case 0:
print("Exactly freezing")
case t if t < 0:
print("Below freezing by", -t, "degrees")
case _:
print("Above freezing")
Pour -5, le premier littéral ne correspond pas. Le motif suivant capture -5 dans t, puis teste t < 0. La garde est vraie : la sortie est donc Below freezing by 5 degrees.
Pour 0, le cas littéral l’emporte avant que la capture soit essayée. Pour 12, la capture réussit mais la garde échoue : Python essaie donc le motif attrape-tout et affiche Above freezing. L’échec d’une garde ne met pas fin à la recherche d’un cas.
Un nom seul ne recherche pas une constante
Supposons que QUIT = "q". Il est tentant d’écrire case QUIT: pour vérifier si le sujet est égal à cette valeur. Mais un nom seul est toujours une capture, même en majuscules. Le cas accepte tout sujet et remplace la valeur de QUIT par celui-ci.
Si d’autres cas suivent une capture sans garde, Python signale une erreur de syntaxe car la capture les rend inaccessibles. Si la capture est en dernier, l’erreur peut passer inaperçue à l’exécution. Effectue explicitement la comparaison avec une garde :
QUIT = "q"
key = "x"
match key:
case k if k == QUIT:
print("Quit")
case _:
print("Keep working")
Ici, k capture "x". La garde compare cette valeur au "q" existant, échoue et laisse le motif attrape-tout afficher Keep working. Un littéral case "q": est plus simple lorsque la valeur fixée peut être écrite directement.
Distinguer un motif valeur en notation pointée
Un nom en notation pointée comme math.pi est un motif valeur, et non une capture. Il recherche une valeur existante et lui compare le sujet avec ==. Les constantes nommées fournies par des modules ou des classes peuvent utiliser cette forme. Le point permet de faire la distinction : case n: affecte une valeur à un nom ; un motif en notation pointée vérifie une valeur existante.
Nommer une correspondance précise avec as
answer = "y"
match answer:
case "y" | "yes" as accepted:
print("Accepted:", accepted)
case _:
print("Please answer y or yes")
Le motif OU vérifie les chaînes autorisées et as stocke le sujet correspondant dans accepted. Pour "y", la sortie est Accepted: y. Il ne remplace pas la saisie par un mot standard : "yes" stockerait "yes". "Yes" ne correspond à aucune des deux chaînes, car la casse compte toujours.
Une ou deux gardes peuvent s’intégrer naturellement parmi des cas fixés. Lorsque presque chaque cas est un test d’intervalle ou utilise des variables différentes, une chaîne if–elif est généralement plus claire. Les deux structures nécessitent un cas par défaut final lorsque chaque entrée doit recevoir une réponse.
Points clés
- Un motif composé d’un nom seul capture le sujet même si ce nom possède déjà une valeur.
- Une garde est vérifiée après la correspondance d’un motif ; une garde fausse permet d’essayer les cas suivants.
- Un motif valeur en notation pointée compare le sujet à une valeur existante.
asnomme le sujet accepté par un motif plus précis.- Utilise un littéral ou une comparaison avec une garde pour éviter de capturer accidentellement le nom d’une constante.
Conditions en Python : exemples
1Transformer des valeurs en comparaisons fiables
13 étapes
- 1IntroductionUne limite de stockage nécessite un test exact
Un casier de stockage accepte les colis pesant de 1 à 8 kilogrammes, bornes incluses. Avant de choisir une action, le programme doit transformer cette règle en une réponse par oui ou par non, un booléen produit par une comparaison, afin que chaque décision ultérieure repose sur un test exact.
Commence par des comparaisons individuelles, puis combine les deux bornes dans un intervalle. Vérifie au passage si une valeur est un nombre ou seulement un texte qui ressemble à un nombre.
- 2ExplicationUne comparaison produit un booléen
Avec
weight = 8, l’expressionweight < 8vautFalse: huit n’est pas inférieur à lui-même. L’expressionweight <= 8vautTrue, car elle inclut l’égalité.Les deux résultats sont de type
bool. ÉcrisTrueetFalseavec une majuscule et sans guillemets. Un texte comme"True"est une chaîne, et untrueen minuscules non défini provoque uneNameErrorau lieu de fournir un booléen. - 3ExempleStocker le résultat sans modifier le poids
weight = 8 fits_upper_limit = weight <= 8 print(weight, fits_upper_limit)D’abord,
8 <= 8est évalué àTrue. L’affectation stocke ce booléen dansfits_upper_limit; le poids initial reste inchangé. La sortie est8 True.Le
=seul effectue l’affectation. La comparaison utilise<=; pour une question sur l’égalité de valeurs, utilise==. - 4DéfiUne comparaison met-elle la valeur à jour ?
Prévois la sortie :
weight = 6 weight == 8 print(weight)---reveal---
Le programme affiche
6. La ligne du milieu compare le poids actuel à 8 mais ne lui affecte jamais une nouvelle valeur. Dans un script, son résultat faux n’est pas utilisé. Une simple affectationweight = 8changerait la sortie finale en8. - 5LienUn calcul peut fournir la valeur à comparer
Un test sur un entier peut comparer un résultat arithmétique :
n % 2 == 0trouve d’abord le reste de la division par 2, puis vérifie s’il est égal à zéro.Pour
n = -9, le reste est1: le test est donc faux. Avec le diviseur positif 2, le reste donné par Python est1pour les entiers impairs, même lorsque l’entier initial est négatif. Comparer le reste à1permet de tester si le nombre est impair. - 6ConseilDes flottants calculés peuvent être légèrement différents
0.1 + 0.2est stocké sous la forme0.30000000000000004: son test d’égalité exacte avec0.3échoue donc.Un test avec une tolérance pose une autre question :
abs((0.1 + 0.2) - 0.3) < 1e-9vérifie si la distance est inférieure à un milliardième.abs()supprime le signe de la différence. Ce test est vrai ; il accepte un minuscule écart au lieu d’affirmer une égalité exacte. - 7ExempleLes chiffres saisis sont d’abord du texte
weight = input("Weight in kilograms: ")Si l’utilisateur saisit
8, la variable contient"8". La comparaisonweight <= 8provoque uneTypeError, car elle tente de comparer l’ordre d’une chaîne et d’un entier.Lis une mesure décimale avec
weight = float(input("Weight in kilograms: ")). Les mêmes chiffres saisis produisent maintenant8.0, qui peut être comparé numériquement à8. - 8ExplicationLes chaînes suivent les caractères à partir de la gauche
L’ordre du texte repose sur les points de code Unicode.
"18" < "8"est vrai car la première paire différente est"1"et"8"; Python ne traite pas ces chaînes comme dix-huit et huit.La casse et les espaces comptent aussi.
"ready" == "Ready"est faux. Compareranswer.strip().lower()à"ready"supprime les caractères d’espacement autour du texte et normalise la casse avant le test d’égalité. - 9DéfiVérifier ce que teste l’appartenance
Évalue ces deux tests :
"box" in "mailbox" "Box" in "mailbox"---reveal---
Le premier vaut
Trueet le second vautFalse. Le test d’appartenance recherche la sous-chaîne exacte, y compris la casse. Les lettres de"box"apparaissent ensemble à la fin de"mailbox"; le"B"majuscule n’y apparaît pas.not ininverserait chaque résultat. - 10ExempleVérifier les deux bornes de la règle du casier
weight = 8 fits_locker = 1 <= weight <= 8 print(fits_locker)La chaîne vérifie
1 <= 8et8 <= 8. Les deux tests réussissent : le résultat est doncTrue. Pourweight = 0.5, le test de la borne inférieure échoue ; pour8.5, le test de la borne supérieure échoue.Chaque comparaison entre valeurs voisines d’une chaîne doit réussir. Remplacer l’un des
<=par<exclut la borne correspondante. - 11Point cléL’absence de données est une autre question
Nonesignifie qu’aucune valeur n’est présente. Vérifie-le avecweight is Noneouweight is not None.L’opérateur
isdemande si des références désignent le même objet. L’égalité numérique utilise==: ne remplace donc pasweight == 8parweight is 8. Des valeurs peuvent être égales sans être le même objet, et une comparaison d’identité avec un littéral numérique produit un avertissement. - 12DéfiCombiner conversion et vérification d’une limite
Un script exécute
weight = float(input("Weight: "))et l’utilisateur saisit"8.5". Que renvoie1 <= weight <= 8, et la conversion elle-même rejette-t-elle la saisie ?---reveal---
La comparaison renvoie
Falsecar8.5 <= 8échoue. La conversion réussit : 8,5 est un flottant valide. Convertir le texte établit un type numérique ; le test d’intervalle détermine séparément si ce nombre est autorisé. - 13RécapitulatifTrois questions à garder distinctes
Choisis l’opérateur adapté à la limite, établis le type de la valeur, puis suis la comparaison.
Une comparaison d’ordre numérique nécessite des valeurs numériques. Les vérifications de chaînes conservent les caractères exacts, sauf si tu nettoies le texte. Un intervalle nécessite ses deux bornes, l’appartenance porte sur une sous-chaîne et l’identité est l’outil adapté pour vérifier
None.
2Suivre les branches d’un choix de livraison
14 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionD’une règle à un chemin dans le code
- 2ExempleUn avertissement qui peut être ignoré
- 3ConseilCorriger la structure avant d’interpréter les résultats
- 4DéfiDéplacer la dernière ligne dans le corps
- 5ExempleDonner une action au chemin où la condition est fausse
- 6Point cléElse désigne toutes les entrées rejetées
- 7ExempleChoisir uniquement les frais dans une expression
- 8DéfiLire les valeurs autour de la condition
- 9ExempleDéfinir trois catégories de service
- 10ExempleUtiliser l’échec précédent pour restreindre l’intervalle
- 11DéfiChanger l’ordre des tests qui se chevauchent
- 12LienUn nouveau if est une nouvelle décision
- 13DéfiTrouver la catégorie et les frais
- 14RécapitulatifAdapter la structure au choix
3Construire et protéger une condition combinée
13 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionPlusieurs faits peuvent contrôler une action
- 2ExplicationExiger les deux faits avec and
- 3ExempleAccepter l’un ou l’autre paiement avec or
- 4DéfiChoisir une ligne qui satisfait la condition
- 5ConseilDonner à chaque comparaison ses propres opérandes
- 6ExemplePlacer les alternatives sous l’exigence commune
- 7Point cléLe regroupement ne détermine pas l’ordre d’exécution
- 8ExemplePlacer une condition de garde avant une moyenne
- 9DéfiQuelles opérations sont atteintes ?
- 10ExplicationNier un intervalle change le connecteur
- 11DéfiPréserver l’inclusion des bornes
- 12DéfiTraduire deux exigences et une exclusion
- 13RécapitulatifLire le sens, le regroupement, puis les opérations atteintes
4Valider, classer et tester une demande de livraison
16 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionChaque entrée doit suivre le chemin prévu
- 2ExempleValider avant de choisir un service
- 3ExempleSuivre le chemin interne
- 4DéfiTrouver à quel if appartient else
- 5LienAplatir lorsqu’une seule action est partagée
- 6ExplicationZéro et une valeur manquante sont tous deux des valeurs fausses
- 7ExempleUn texte qui semble négatif peut tout de même satisfaire le test
- 8DéfiConserver un zéro réel
- 9Point cléUn opérateur peut sélectionner du texte
- 10ExempleConsigner un chemin sans inventer de tests
- 11ConseilChoisir des tests pour les chemins et les limites
- 12DéfiUne condition large masque une branche ultérieure
- 13LienChercher les cas non couverts et les chevauchements involontaires
- 14ConseilExaminer la valeur avant une comparaison risquée
- 15DéfiTester complètement une décision corrigée
- 16RécapitulatifDonner un objectif clair aux valeurs et aux tests
5Comparer des commandes et ajouter des cas avec gardes
15 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionUn sujet, plusieurs cas possibles
- 2ExempleOrganiser le menu de commandes
- 3Point cléLe cas suivant ne s’exécute pas automatiquement
- 4ExempleUtiliser un seul corps pour deux commandes exactes
- 5DéfiPlacer le cas par défaut au bon endroit
- 6ConseilVérifier le comportement des motifs numériques et booléens
- 7ExplicationUn nom seul capture tout sujet
- 8ExempleAjouter une garde à la valeur capturée
- 9DéfiContinuer après une garde fausse
- 10ExempleUn nom en majuscules capture toujours
- 11LienUn point modifie la recherche de valeur
- 12ExempleNommer une alternative littérale correspondante
- 13DéfiChoisir une structure de menu adaptée à la tâche
- 14DéfiConserver un nom fixé et prévoir un cas par défaut
- 15RécapitulatifLire les motifs avant les corps des cas
Conditions en Python : QCM
Série 1 : Appliquer des règles et diagnostiquer les mauvaises branches10 Questions Pratiques
Question 1 sur 10
Quelle valeur booléenne est stockée dans is_odd ?
n = -13
is_odd = n % 2 == 1
Afficher la réponseMasquer la réponse
True. Un reste de -1 suivrait une règle de signe différente de celle de Python pour % avec un diviseur positif.Question 2 sur 10
level = input("Level: "). L’utilisateur saisit 16. Que se passe-t-il lorsqu’il évalue ensuite level < 20 ?Afficher la réponseMasquer la réponse
input() stocke le texte "16", et non l’entier 16. Python ne peut pas comparer l’ordre d’une chaîne et d’un entier : la comparaison lève donc une TypeError. Elle serait vraie après une conversion avec int(), mais le code présenté n’a pas effectué cette conversion.Question 3 sur 10
Afficher la réponseMasquer la réponse
pass est l’instruction Python prévue pour ne rien faire : elle donne donc à une branche inachevée un corps indenté valide. Un else commence une clause alternative et ne peut pas servir de corps. La branche a besoin d’une instruction même lorsque sa condition serait fausse.Question 4 sur 10
Quelle est la valeur finale de label ?
points = 37
if points >= 30:
label = "High"
if points >= 10:
label = "Middle"
else:
label = "Low"
Afficher la réponseMasquer la réponse
if indépendant affecte "High", mais l’exécution atteint ensuite le second if. Sa condition est aussi vraie : il remplace donc la valeur de label par "Middle" et ignore son else. Conserver "High" reviendrait à traiter à tort le second if comme un elif de la première décision.Question 5 sur 10
is_open and not is_full vrai ?Afficher la réponseMasquer la réponse
is_open soit vrai, et la seconde exigence niée nécessite que is_full soit faux. Si les deux entrées sont vraies, not is_full devient faux et la condition combinée échoue. Avoir de la place ne suffit pas non plus à satisfaire l’exigence que le lieu soit ouvert.Question 6 sur 10
Afficher la réponseMasquer la réponse
and est prioritaire et un bon seul peut rendre l’expression vraie même en dehors d’un jour de semaine. La version qui utilise or pour le jour de semaine accepte aussi des jours qui ne satisfont pas l’exigence énoncée.Question 7 sur 10
Qu’est-ce qui s’affiche ?
is_open = False
has_booking = True
if is_open:
if has_booking:
print("Enter")
else:
print("Book first")
else:
print("Closed")
Afficher la réponseMasquer la réponse
else. Le else externe, aligné sur if is_open:, affiche Closed. Choisir Enter reviendrait à tester une condition interne dont Python n’atteint jamais la branche englobante.Question 8 sur 10
"" or "Reader" ?Afficher la réponseMasquer la réponse
or évalue donc son opérande droit, "Reader", et le renvoie. Ce résultat est une chaîne, et non un booléen. Renvoyer True reviendrait à confondre la valeur de vérité utilisée pour choisir un opérande avec l’opérande effectivement renvoyé par l’expression.Question 9 sur 10
"edit" et "change" vers un même corps ?Afficher la réponseMasquer la réponse
| : l’une ou l’autre chaîne exacte peut donc correspondre au cas. Le mot booléen or n’est pas un séparateur de motifs valide. Un en-tête de cas décrit les motifs à comparer : la syntaxe ordinaire d’une expression booléenne ne peut donc pas être utilisée à leur place ici.Question 10 sur 10
Qu’est-ce qui s’affiche ?
value = 11
match value:
case n if n < 0:
print("Negative", n)
case n if n % 2 == 0:
print("Even", n)
case _:
print("Other")
Afficher la réponseMasquer la réponse
Other ; une capture réussie ne sélectionne pas à elle seule un corps lorsque sa garde est fausse.Série 2 : Lire des comparaisons et suivre des décisions10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
weight ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
"14" < "7" ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
Qu’est-ce qui s’affiche ?
stock = 0
if stock > 0:
print("Available")
print("Checked")
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
Quelle valeur est affectée à fee ?
has_pass = False
fee = 2 if has_pass else 7
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
Qu’est-ce qui s’affiche ?
points = 46
if points >= 50:
print("Gold")
elif points >= 30:
print("Silver")
elif points >= 10:
print("Bronze")
else:
print("Starter")
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
total et items, un drapeau doit être vrai uniquement lorsqu’une moyenne dépasse 8. Zéro élément doit donner faux sans tenter de division. Quelle expression satisfait les deux exigences ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
bool("no") ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
visits d’au moins 24. Une personne a écrit visits > 24. Quelle entrée révèle le plus directement le résultat incorrect ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
Qu’est-ce qui s’affiche ?
mode = "SAVE"
match mode:
case "save" | "write":
print("Stored")
case _:
print("Unknown")
print("End")
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Série 3 : Suivre des valeurs à travers plusieurs décisions10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
a = 0.1 + 0.2 et une cible vaut b = 0.3. La vérification doit accepter les écarts inférieurs à 1e-8. Quel test applique cette règle ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
Qu’est-ce qui s’affiche ?
remaining = 4
if remaining > 0:
remaining = 0
if remaining == 0:
print("Empty")
print(remaining)
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
Quelle valeur est affectée à label ?
has_booking = True
label = "Reserved" if has_booking else "Open"
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
Que se passe-t-il lorsque cette expression est évaluée ?
is_admin = True
count = 0
total = 18
is_admin or count != 0 and total / count > 6
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
Qu’est-ce qui s’affiche, et pourquoi ?
has_badge = True
is_active = False
if has_badge:
if is_active:
print("Enter")
else:
print("Get a badge")
print("Checked")
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
None signifie qu’aucun nombre n’a été fourni. Quelle affectation utilise la valeur par défaut 9 uniquement pour une donnée manquante ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
Ce programme de classification d’entiers doit afficher exactement une indication de signe pour chaque entier. Quelle entrée révèle un cas manquant ?
if balance < 0:
print("Negative")
elif balance > 0:
print("Positive")
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
Qu’est-ce qui s’affiche ?
reply = "later"
match reply:
case "now" | "later" as chosen:
print(chosen)
case _:
print("Unknown")
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
not (-4 <= reading <= 9) ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
Qu’arrive-t-il à EXIT ?
EXIT = "x"
key = "z"
match key:
case EXIT:
print(EXIT)
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Série 4 : Corriger et tester des règles de décision combinées10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
"go" malgré les caractères d’espacement autour du texte et les différences de casse. Elle doit rejeter "gopher" et "stop". Quelle condition applique cette règle ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
Qu’est-ce qui s’affiche ?
units = 0
amount = 15
result = amount / units if units != 0 else "No units"
print(result)
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
"High" à partir de 70 points, "Mid" de 35 à 69 inclus et "Low" en dessous de 35. Les tests utilisent >= dans une seule chaîne. Quel ordre de branches et quelles étiquettes appliquent la règle ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
wired et wireless, est disponible et que la maintenance est désactivée. Quelle condition applique toute la règle ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
"High" ; les autres scores valides doivent donner "Low" ; les scores invalides doivent donner "Invalid". Un script classe avec if score >= 9: et else:, mais ne valide jamais l’intervalle. Quelle structure le corrige pour tout score entier ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
Quelle valeur est stockée dans chosen ?
preferred = ""
alternate = "Morgan"
chosen = preferred or alternate or "Visitor"
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
Pour des scores entiers, un programme de classification doit utiliser "Top" à partir de 80, "Pass" de 40 à 79 inclus et "Retry" en dessous de 40. Quelle entrée de test révèle une erreur dans ce code ?
if score >= 40:
print("Pass")
elif score >= 80:
print("Top")
else:
print("Retry")
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
Qu’est-ce qui s’affiche ?
value = True
match value:
case 1:
print("Number case")
case True:
print("Boolean case")
case _:
print("Other case")
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
case n ___ n > 4: ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Tu bloques sur ton propre exercice ? Aide aux Devoirs
Mots-Clés
A
Affectation
=, en remplaçant toute valeur déjà associée à ce nom.score = 28 modifie score ; écrire score == 28 ne fait que comparer sa valeur actuelle.Algorigramme
Alternative
if et else, avec un corps à exécuter pour chacune des deux valeurs de vérité.Aplatissement
and.B
Bloc
print() sous un test de température se trouvent dans le bloc contrôlé par ce test.Borne incluse
<= ou >= dans une comparaison numérique.age >= 18 permet à une personne âgée d’exactement 18 ans de satisfaire le test.Branche else
if correspondant est fausse ; l’en-tête else: n’a pas de condition.if sur les nombres pairs, la branche else s’exécute pour -7, car son reste n’est pas nul.Branche inaccessible
elif score >= 90: suit le test plus large if score >= 60:.Branche par défaut
else final dans une instruction conditionnelle à plusieurs branches."Unknown option" pour une saisie de menu autre que "1" ou "2".C
Clause elif
if et n’est examinée qu’après l’échec de toutes les conditions précédentes.Comparaison chaînée
2 <= level <= 9 inclut 2 et 9, mais rejette un niveau de 10.Comparaison sensible à la casse
"Yes" lorsque le texte exact requis est "yes".Condition de garde
count != 0 avant la division dans count != 0 and total / count > 10.Condition externe
has_ticket est fausse, la comparaison interne de l’âge est ignorée.Conditions équivalentes
not (age >= 18) et age < 18 concordent pour tout âge entier.Conjonction
and qui ne réussit que si les deux exigences sont satisfaites, comme les deux bornes d’un intervalle.age >= 13 and age <= 19 rejette les âges situés de part et d’autre de l’intervalle de l’adolescence.Conversion de type
int() avant de comparer des grandeurs.level = int(input("Level: ")) rend possible un test de limite numérique.Couverture des branches
E
Expression conditionnelle
a if condition else b, en n’évaluant que la valeur sélectionnée.fee = 0 if has_pass else 4 stocke 4 lorsque le pass est absent.É
Évaluation en court-circuit
total / count après un test count != 0 faux relié par and.G
Garde
if après un motif, qui doit être satisfaite avant l’exécution de son corps ; une garde fausse permet d’essayer les cas ultérieurs.case n if n < 0: vérifie le nombre capturé avant de choisir le cas négatif.I
Indentation
print("Done") dans le corps d’un if le fait s’exécuter après toute la décision.Instruction conditionnelle imbriquée
Instruction if
if stock > 0: ignore son corps lorsque stock vaut zéro.Instruction match
"stop" ignore case "start": et exécute le corps sous case "stop":.Instruction pass
if sans produire de sortie.L
Lois de De Morgan
and par or, ou inversement, tout en préservant sa valeur de vérité.not (A or B) en not A and not B, en inversant les deux parties.M
Motif as
case "y" | "yes" as reply: stocke "y" lorsque c’est la chaîne fournie.Motif attrape-tout
_, qui accepte tout sujet sans le nommer ; un cas attrape-tout sans garde doit apparaître en dernier."Unknown command" lorsque les motifs de commandes fixées précédents échouent.Motif de capture
case STOP: remplace la valeur de STOP ; les majuscules ne le transforment pas en recherche de valeur.Motif littéral
None ; les littéraux numériques et les littéraux de chaîne sont comparés par égalité.case 6: accepte le nombre 6, mais rejette le texte "6" renvoyé par la saisie.Motif OU
| et réussit si l’une des alternatives correspond, avec un corps de cas partagé.case "open" | "load": exécute le même corps pour l’une ou l’autre chaîne de commande.Motif valeur
math.pi effectue une comparaison avec une valeur existante du module au lieu d’affecter une valeur à un nom seul.O
Opérande
and et or renvoient l’un de leurs opérandes au lieu de toujours renvoyer un booléen."" or "Guest" est une valeur fausse : l’expression renvoie donc l’opérande droit.Opérateur booléen
and, or et not pour ces opérations.has_ticket and is_open dans un seul test.Opérateur d’appartenance
in et not in testent des sous-chaînes exactes."rain" in "raincoat" trouve le texte et renvoie True.Opérateur de comparaison
<= lorsqu’il inclut une limite.weight <= 8 accepte un poids d’exactement 8 kilogrammes.Ou inclusif
or booléen de Python suit ce sens.is_member or has_coupon de réussir lorsque l’adhésion et le coupon sont tous deux présents.P
Point de code Unicode
"Z" est inférieur à celui de "a" : "Zebra" < "apple" est donc vrai.Priorité des opérateurs
and étant regroupé avant or.A or B and C se lit A or (B and C), sauf si des parenthèses changent le regroupement.Pseudo-code
R
Règle de la première correspondance
>= 60 si ce test large apparaît en premier.S
Seuil
score >= 90.Sujet
match dans l’en-tête.match command:, la valeur actuelle de command est le sujet utilisé pour chaque essai de cas.T
Table de vérité
Tableau de suivi
Test d’identité
is ou is not pour vérifier si des références désignent le même objet, souvent pour reconnaître None.result is None distingue un résultat manquant d’une valeur réelle égale à zéro.Test de valeur limite
age >= 18.Tolérance
1e-9 permet à abs(a - b) < 1e-9 d’accepter un minuscule écart entre des flottants calculés.V
Valeur booléenne
True et False, que Python utilise pour exprimer le résultat d’un test auquel on répond par oui ou par non.is_ready = count >= 4 vaut True lorsque count est égal à 4.Valeur de vérité
if name: de rejeter une réponse vide sans comparaison explicite avec "".Valeur fausse
None, False, le texte vide et les collections natives vides.quantity or 1, même si zéro a été saisi intentionnellement.Valeur par défaut
or."Guest" est sélectionnée dans name or "Guest" lorsque name est la chaîne vide.Valeur vraie
"False" satisfait if answer: car ses caractères rendent la chaîne non vide.Validation des entrées
0 <= score <= 100 rejette 150 avant qu’une note puisse être attribuée.À propos de cette unité
Crée ton propre Matériel d'Étude
Transforme tes notes, diapos et documents en Guides d'Étude, Questions Pratiques, Flashcards et 6 autres outils.