Conditions et logique booléenne en Python

Apprends comment un programme Python prend des décisions. Compare des nombres et du texte avec les opérateurs de comparaison, associe des conditions avec 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

  1. Écris des comparaisons avec les six opérateurs de comparaison de Python, prévois si elles donnent True ou False pour 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 comparaison
      Utilise ==, !=, <, <=, > 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 intervalles
      Compare 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 None avec le bon opérateur.
  2. É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 if avec 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 else
      Ajoute une branche else pour 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 elif
      Construis des chaînes if–elif–else qui 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.
  3. Associe et nie des conditions avec and, or et not, 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 not
      Utilise les tables de vérité pour prévoir les résultats de and, or et not, traduis des règles de la vie courante en conditions combinées et évite l’erreur classique avec or.
    • Prévoir comment Python évalue des conditions plus longues
      Applique 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.
  4. 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 autres
      Place une instruction if dans une autre branche lorsqu’une seconde décision dépend de la première, lis l’imbrication grâce à l’indentation et aplatis-la lorsque and ou elif exprime 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écision
      Suis 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.
  5. Utilise l’instruction match de Python pour comparer une valeur à plusieurs motifs, capturer des valeurs et ajouter des gardes, puis décide quand match est plus clair qu’une chaîne if–elif.
    • Comparer une valeur à des cas fixés
      Écris une instruction match avec 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 cas
      Utilise des motifs de capture et as pour nommer la valeur correspondante, ajoute des gardes if pour 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.

Conditions en Python : cours

5 chapitres

1

Des 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érateurQuestionAvec 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 True et False.
  • = 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 == 0 teste 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ègleTest Python
De 1 à 10, les deux bornes incluses1 <= x <= 10
Strictement entre 1 et 101 < 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() ou float() avant les comparaisons numériques.
  • Dans une comparaison chaînée d’intervalle, chaque comparaison entre valeurs voisines doit réussir.
  • in teste l’appartenance ; is None teste la présence du marqueur d’absence de valeur.
2

Choisir 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èmeCorrection
Deux-points manquantsTermine l’en-tête par :.
Corps non indentéIndente les lignes contrôlées par if.
Indentation incohérenteAligne les instructions qui appartiennent au même bloc.
Mélange de tabulations et d’espacesConfigure 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 if se 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 if sé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.
  • pass fournit 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".

BesoinForme adaptée
Plusieurs actions sur l’un ou l’autre cheminBlocs if–else complets
Une valeur parmi deuxExpression 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 son if.
  • Un else couvre 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 b et 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.

ScorePremier chemin qui réussitNote
90score >= 90A
89score >= 80B
60score >= 60D
59else finalF
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–elif s’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 if séparées peuvent exécuter plusieurs corps et remplacer des valeurs affectées précédemment.
  • Un else final 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é.
3

Combiner 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.

ABA and BA or B
TrueTrueTrueTrue
TrueFalseFalseTrue
FalseTrueFalseTrue
FalseFalseFalseFalse

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
SensTest
Entre 0 et 100 inclusscore >= 0 and score <= 100
En dehors de 0 à 100score < 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

  • and exige que les deux entrées booléennes soient vraies ; le or inclusif exige qu’au moins l’une d’elles soit vraie.
  • not inverse 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 faut or.
  • 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 :

  1. Élévation à la puissance : **.
  2. Multiplication, division, division entière, reste : *, /, //, %.
  3. Addition et soustraction : +, -.
  4. Comparaisons, notamment in, not in, is et is not.
  5. not, puis and, puis or.
  6. 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
ExpressionQuand Python ignore B
A and BA est une valeur fausse
A or BA 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 initialeForme é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.
  • and ignore son opérande droit après un opérande gauche faux ; or l’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 and par or, ou inversement.
  • Utilise des parenthèses pour montrer le regroupement voulu lorsque tu mélanges and et or.
  • Teste directement les variables booléennes avec leur nom ou avec not.
4

Rendre 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 if appartient un else.
  • 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.

Valeurbool(value)Pourquoi
0, 0.0FalseZéro numérique
-3TrueNombre non nul
""FalseChaîne vide
" "TrueContient un espace
"0", "False", "no"TrueChaînes non vides
NoneFalseMarqueur d’absence de valeur
[], (), {}FalseCollections 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 :

ExpressionValeur renvoyée
"" or "Guest""Guest"
"Ana" or "Guest""Ana"
0 and 50
3 and 55

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, None et False sont des valeurs fausses.
  • Les chaînes non vides restent des valeurs vraies même lorsqu’elles contiennent "0" ou "False".
  • Utilise is not None lorsque zéro est une valeur valide fournie.
  • and et or renvoient des opérandes ; not renvoie toujours un booléen.
  • Une valeur par défaut avec or remplace 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 atteinteRésultatAction
score >= 90FalsePasser au test suivant
score >= 80FalsePasser au test suivant
score >= 70TrueDonner à grade la valeur "C"
Reste de la chaîneNon é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.
5

Choisir 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écisionChoix de départ clair
Un sujet comparé à de nombreuses valeurs fixéesmatch
Intervalles comme score >= 90if–elif
Conditions portant sur différentes variablesif–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

  • match né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, False et None utilisent l’identité.
  • Les sujets sans correspondance n’exécutent aucun corps en l’absence de cas par défaut.
  • Utilise match pour les choix fixés et if–elif pour 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.
  • as nomme 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

5 Leçons Interactives

1

Transformer des valeurs en comparaisons fiables

13 étapes
Suis une vérification de limite de poids, des comparaisons numériques jusqu’à la saisie, aux vérifications de texte et à un intervalle bornes incluses.
  1. 1
    IntroductionUne 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.

  2. 2
    ExplicationUne comparaison produit un booléen

    Avec weight = 8, l’expression weight < 8 vaut False : huit n’est pas inférieur à lui-même. L’expression weight <= 8 vaut True, car elle inclut l’égalité.

    Les deux résultats sont de type bool. Écris True et False avec une majuscule et sans guillemets. Un texte comme "True" est une chaîne, et un true en minuscules non défini provoque une NameError au lieu de fournir un booléen.

  3. 3
    ExempleStocker le résultat sans modifier le poids
    weight = 8
    fits_upper_limit = weight <= 8
    print(weight, fits_upper_limit)
    

    D’abord, 8 <= 8 est évalué à True. L’affectation stocke ce booléen dans fits_upper_limit ; le poids initial reste inchangé. La sortie est 8 True.

    Le = seul effectue l’affectation. La comparaison utilise <= ; pour une question sur l’égalité de valeurs, utilise ==.

  4. 4
    Dé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 affectation weight = 8 changerait la sortie finale en 8.

  5. 5
    LienUn calcul peut fournir la valeur à comparer

    Un test sur un entier peut comparer un résultat arithmétique : n % 2 == 0 trouve d’abord le reste de la division par 2, puis vérifie s’il est égal à zéro.

    Pour n = -9, le reste est 1 : le test est donc faux. Avec le diviseur positif 2, le reste donné par Python est 1 pour les entiers impairs, même lorsque l’entier initial est négatif. Comparer le reste à 1 permet de tester si le nombre est impair.

  6. 6
    ConseilDes flottants calculés peuvent être légèrement différents

    0.1 + 0.2 est stocké sous la forme 0.30000000000000004 : son test d’égalité exacte avec 0.3 échoue donc.

    Un test avec une tolérance pose une autre question : abs((0.1 + 0.2) - 0.3) < 1e-9 vé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.

  7. 7
    ExempleLes chiffres saisis sont d’abord du texte
    weight = input("Weight in kilograms: ")
    

    Si l’utilisateur saisit 8, la variable contient "8". La comparaison weight <= 8 provoque une TypeError, 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 maintenant 8.0, qui peut être comparé numériquement à 8.

  8. 8
    ExplicationLes 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. Comparer answer.strip().lower() à "ready" supprime les caractères d’espacement autour du texte et normalise la casse avant le test d’égalité.

  9. 9
    DéfiVérifier ce que teste l’appartenance

    Évalue ces deux tests :

    "box" in "mailbox"
    "Box" in "mailbox"
    

    ---reveal---

    Le premier vaut True et le second vaut False. 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 in inverserait chaque résultat.

  10. 10
    ExempleVé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 <= 8 et 8 <= 8. Les deux tests réussissent : le résultat est donc True. Pour weight = 0.5, le test de la borne inférieure échoue ; pour 8.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.

  11. 11
    Point cléL’absence de données est une autre question

    None signifie qu’aucune valeur n’est présente. Vérifie-le avec weight is None ou weight is not None.

    L’opérateur is demande si des références désignent le même objet. L’égalité numérique utilise == : ne remplace donc pas weight == 8 par weight 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.

  12. 12
    DéfiCombiner conversion et vérification d’une limite

    Un script exécute weight = float(input("Weight: ")) et l’utilisateur saisit "8.5". Que renvoie 1 <= weight <= 8, et la conversion elle-même rejette-t-elle la saisie ?

    ---reveal---

    La comparaison renvoie False car 8.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é.

  13. 13
    Ré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.

2

Suivre les branches d’un choix de livraison

14 étapes
Construis une décision de livraison à partir d’un simple if, puis ajoute deux alternatives, une valeur sélectionnée et des catégories de service ordonnées.

Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.

  1. 1
    IntroductionD’une règle à un chemin dans le code
  2. 2
    ExempleUn avertissement qui peut être ignoré
  3. 3
    ConseilCorriger la structure avant d’interpréter les résultats
  4. 4
    DéfiDéplacer la dernière ligne dans le corps
  5. 5
    ExempleDonner une action au chemin où la condition est fausse
  6. 6
    Point cléElse désigne toutes les entrées rejetées
  7. 7
    ExempleChoisir uniquement les frais dans une expression
  8. 8
    DéfiLire les valeurs autour de la condition
  9. 9
    ExempleDéfinir trois catégories de service
  10. 10
    ExempleUtiliser l’échec précédent pour restreindre l’intervalle
  11. 11
    DéfiChanger l’ordre des tests qui se chevauchent
  12. 12
    LienUn nouveau if est une nouvelle décision
  13. 13
    DéfiTrouver la catégorie et les frais
  14. 14
    RécapitulatifAdapter la structure au choix
3

Construire et protéger une condition combinée

13 étapes
Traduis une règle de réservation, regroupe des alternatives, utilise des conditions de garde en court-circuit et nie correctement un intervalle.

Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.

  1. 1
    IntroductionPlusieurs faits peuvent contrôler une action
  2. 2
    ExplicationExiger les deux faits avec and
  3. 3
    ExempleAccepter l’un ou l’autre paiement avec or
  4. 4
    DéfiChoisir une ligne qui satisfait la condition
  5. 5
    ConseilDonner à chaque comparaison ses propres opérandes
  6. 6
    ExemplePlacer les alternatives sous l’exigence commune
  7. 7
    Point cléLe regroupement ne détermine pas l’ordre d’exécution
  8. 8
    ExemplePlacer une condition de garde avant une moyenne
  9. 9
    DéfiQuelles opérations sont atteintes ?
  10. 10
    ExplicationNier un intervalle change le connecteur
  11. 11
    DéfiPréserver l’inclusion des bornes
  12. 12
    DéfiTraduire deux exigences et une exclusion
  13. 13
    RécapitulatifLire le sens, le regroupement, puis les opérations atteintes
4

Valider, classer et tester une demande de livraison

16 étapes
Suis des vérifications imbriquées, préserve les valeurs zéro valides et construis des tests qui révèlent les cas non couverts et les seuils incorrects.

Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.

  1. 1
    IntroductionChaque entrée doit suivre le chemin prévu
  2. 2
    ExempleValider avant de choisir un service
  3. 3
    ExempleSuivre le chemin interne
  4. 4
    DéfiTrouver à quel if appartient else
  5. 5
    LienAplatir lorsqu’une seule action est partagée
  6. 6
    ExplicationZéro et une valeur manquante sont tous deux des valeurs fausses
  7. 7
    ExempleUn texte qui semble négatif peut tout de même satisfaire le test
  8. 8
    DéfiConserver un zéro réel
  9. 9
    Point cléUn opérateur peut sélectionner du texte
  10. 10
    ExempleConsigner un chemin sans inventer de tests
  11. 11
    ConseilChoisir des tests pour les chemins et les limites
  12. 12
    DéfiUne condition large masque une branche ultérieure
  13. 13
    LienChercher les cas non couverts et les chevauchements involontaires
  14. 14
    ConseilExaminer la valeur avant une comparaison risquée
  15. 15
    DéfiTester complètement une décision corrigée
  16. 16
    RécapitulatifDonner un objectif clair aux valeurs et aux tests
5

Comparer des commandes et ajouter des cas avec gardes

15 étapes
Construis un menu de commandes, suis une comparaison de nombre avec garde et distingue les noms de capture des constantes existantes.

Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.

  1. 1
    IntroductionUn sujet, plusieurs cas possibles
  2. 2
    ExempleOrganiser le menu de commandes
  3. 3
    Point cléLe cas suivant ne s’exécute pas automatiquement
  4. 4
    ExempleUtiliser un seul corps pour deux commandes exactes
  5. 5
    DéfiPlacer le cas par défaut au bon endroit
  6. 6
    ConseilVérifier le comportement des motifs numériques et booléens
  7. 7
    ExplicationUn nom seul capture tout sujet
  8. 8
    ExempleAjouter une garde à la valeur capturée
  9. 9
    DéfiContinuer après une garde fausse
  10. 10
    ExempleUn nom en majuscules capture toujours
  11. 11
    LienUn point modifie la recherche de valeur
  12. 12
    ExempleNommer une alternative littérale correspondante
  13. 13
    DéfiChoisir une structure de menu adaptée à la tâche
  14. 14
    DéfiConserver un nom fixé et prévoir un cas par défaut
  15. 15
    RécapitulatifLire les motifs avant les corps des cas

Conditions en Python : QCM

40 Questions Pratiques en 4 séries

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
  1. False, car n est négatif.
  2. False, car le reste est -1.
  3. True, car tout nombre non nul est impair.
  4. True, car le reste est 1.
Afficher la réponseMasquer la réponse
Réponse : D
Avec le diviseur positif 2, Python donne un reste de 1 pour l’entier impair négatif -13. Comparer ce reste à 1 stocke 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

Un programme exécute level = input("Level: "). L’utilisateur saisit 16. Que se passe-t-il lorsqu’il évalue ensuite level < 20 ?
  1. Une TypeError est levée.
  2. L’expression vaut True.
  3. L’expression vaut False.
  4. La valeur de level devient 20.
Afficher la réponseMasquer la réponse
Réponse : A
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

Quelle est l’instruction Python prévue pour ne rien faire dans une branche inachevée ?
  1. else
  2. elif
  3. pass
  4. if
Afficher la réponseMasquer la réponse
Réponse : C
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"
  1. "High"
  2. "Middle"
  3. "Low"
  4. "High Middle"
Afficher la réponseMasquer la réponse
Réponse : B
Le premier 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

Quel couple d’entrées booléennes rend is_open and not is_full vrai ?
  1. is_open = False, is_full = False
  2. is_open = True, is_full = True
  3. is_open = False, is_full = True
  4. is_open = True, is_full = False
Afficher la réponseMasquer la réponse
Réponse : D
La première exigence nécessite que 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

Une réservation est autorisée uniquement un jour de semaine et uniquement si l’utilisateur dispose de crédit ou d’un bon. Quelle expression applique cette règle ?
  1. is_weekday and (has_credit or has_voucher)
  2. is_weekday and has_credit and has_voucher
  3. (is_weekday and has_credit) or has_voucher
  4. is_weekday or (has_credit and has_voucher)
Afficher la réponseMasquer la réponse
Réponse : A
L’exigence du jour de semaine s’applique aux deux moyens de paiement : les alternatives de paiement doivent donc être regroupées entre parenthèses. Sans ce regroupement, 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")
  1. Uniquement Book first
  2. Uniquement Closed
  3. Enter, puis Closed
  4. Rien ne s’affiche
Afficher la réponseMasquer la réponse
Réponse : B
La condition externe fausse fait ignorer tout le corps, y compris le test interne de réservation et son 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

Quelle valeur renvoie "" or "Reader" ?
  1. La chaîne vide ""
  2. Le booléen False
  3. La chaîne "Reader"
  4. Le booléen True
Afficher la réponseMasquer la réponse
Réponse : C
La chaîne vide à gauche est une valeur fausse : 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

Quel en-tête de cas dirige l’une ou l’autre des chaînes "edit" et "change" vers un même corps ?
  1. case "edit" | "change":
  2. case "edit" or "change":
  3. case "edit" and "change":
  4. case "edit" == "change":
Afficher la réponseMasquer la réponse
Réponse : A
Un motif OU sépare les alternatives avec le symbole | : 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")
  1. Negative 11
  2. Even 11
  3. Rien ne s’affiche
  4. Uniquement Other
Afficher la réponseMasquer la réponse
Réponse : D
La première capture accepte 11, mais sa garde vérifiant si le nombre est négatif échoue. Python essaie le cas suivant, dont la capture réussit aussi mais dont la garde vérifiant si le nombre est pair échoue car le reste est 1. Il affiche ensuite 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

Un colis peut peser au maximum 6 kilogrammes. Quel test accepte exactement les poids autorisés avec weight ?
  1. weight < 6
  2. weight >= 6
  3. weight <= 6
  4. weight > 6
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 2 sur 10

Quelle est la valeur de "14" < "7" ?
  1. False, car 14 dépasse 7.
  2. True, car "1" précède "7".
  3. False, car les chaînes diffèrent.
  4. True, car deux chiffres dépassent un chiffre.
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")
  1. Uniquement Available
  2. Available, puis Checked
  3. Rien ne s’affiche
  4. Uniquement 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
  1. 7
  2. 2
  3. False
  4. 0
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")
  1. Silver, puis Bronze
  2. Uniquement Silver
  3. Uniquement Bronze
  4. Uniquement Starter
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 6 sur 10

Un téléchargement peut commencer si un utilisateur possède un abonnement ou un pass journalier, y compris s’il possède les deux. Quelle condition applique cette règle ?
  1. has_subscription or has_day_pass
  2. has_subscription and has_day_pass
  3. not has_subscription and has_day_pass
  4. not (has_subscription or has_day_pass)
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 7 sur 10

Pour les valeurs numériques 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 ?
  1. total / items > 8 and items != 0
  2. items == 0 or total / items > 8
  3. items != 0 or total / items > 8
  4. items != 0 and total / items > 8
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 8 sur 10

Que renvoie bool("no") ?
  1. La chaîne "no"
  2. False
  3. True
  4. La valeur None
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 9 sur 10

Une règle pour les entiers doit accepter les valeurs de visits d’au moins 24. Une personne a écrit visits > 24. Quelle entrée révèle le plus directement le résultat incorrect ?
  1. 23
  2. 25
  3. 24
  4. 26
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")
  1. Uniquement Stored
  2. Unknown, puis End
  3. Stored, puis End
  4. Uniquement Unknown
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

Un calcul donne 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 ?
  1. a == b
  2. abs(a - b) > 1e-8
  3. abs(a - b) < 1e-8
  4. abs(a + b) < 1e-8
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)
  1. Empty, puis 0
  2. Uniquement 0
  3. Empty, puis 4
  4. Uniquement 4
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"
  1. True
  2. "Open"
  3. False
  4. "Reserved"
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
  1. Elle lève immédiatement une ZeroDivisionError.
  2. Elle renvoie True sans effectuer de division.
  3. Elle renvoie False sans effectuer de division.
  4. Elle effectue la division après avoir vérifié count.
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")
  1. Get a badge, puis Checked ; le test interne échoue.
  2. Enter, puis Checked ; le test du badge réussit.
  3. Uniquement Checked ; le else externe est ignoré.
  4. Uniquement Get a badge ; le else interne s’exécute.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 6 sur 10

Zéro est un nombre fourni valide et None signifie qu’aucun nombre n’a été fourni. Quelle affectation utilise la valeur par défaut 9 uniquement pour une donnée manquante ?
  1. count = supplied or 9
  2. count = 9 if not supplied else supplied
  3. count = supplied if supplied else 9
  4. count = 9 if supplied is None else supplied
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")
  1. 0
  2. -1
  3. 1
  4. 2
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")
  1. now
  2. later
  3. Unknown
  4. True
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 9 sur 10

Un capteur accepte des relevés numériques de -4 à 9 inclus. Quelle condition est équivalente à not (-4 <= reading <= 9) ?
  1. reading <= -4 or reading >= 9
  2. reading < -4 and reading > 9
  3. reading >= -4 and reading <= 9
  4. reading < -4 or 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)
  1. Il reste "x" et rien ne s’affiche.
  2. Il reste "x" et x s’affiche.
  3. Il devient "z" et z s’affiche.
  4. Il devient True et True s’affiche.
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

Une invite accepte "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 ?
  1. answer.strip().lower() in "go"
  2. answer.strip().lower() == "go"
  3. "go" in answer.strip().lower()
  4. answer.strip() == "go"
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)
  1. Uniquement No units
  2. Uniquement 0
  3. Uniquement 15
  4. Une ZeroDivisionError est levée.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 3 sur 10

Pour un nombre entier de points, une évaluation vaut "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 ?
  1. >= 35 : Mid ; >= 70 : High ; sinon : Low
  2. >= 70 : High ; >= 35 : Low ; sinon : Mid
  3. >= 35 : High ; >= 70 : Mid ; sinon : Low
  4. >= 70 : High ; >= 35 : Mid ; sinon : Low
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 4 sur 10

Un service ne doit fonctionner que lorsqu’au moins l’une des deux connexions, wired et wireless, est disponible et que la maintenance est désactivée. Quelle condition applique toute la règle ?
  1. wired or wireless and not maintenance
  2. wired and wireless and not maintenance
  3. (wired or wireless) and not maintenance
  4. (wired or wireless) or not maintenance
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 5 sur 10

Les scores sont des entiers de 0 à 12 inclus. Les scores valides d’au moins 9 doivent donner "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 ?
  1. Vérifier score >= 0 à l’extérieur ; classer à l’intérieur ; sinon afficher Invalid.
  2. Vérifier 0 <= score <= 12 à l’extérieur ; classer à l’intérieur ; sinon afficher Invalid.
  3. Vérifier score <= 12 à l’extérieur ; classer à l’intérieur ; sinon afficher Invalid.
  4. Classer d’abord ; puis vérifier 0 <= score <= 12 et afficher Invalid en cas d’échec.
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"
  1. "Morgan"
  2. "Visitor"
  3. True
  4. ""
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")
  1. 39
  2. 40
  3. 79
  4. 80
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")
  1. Uniquement Boolean case
  2. Number case, puis Boolean case
  3. Uniquement Number case
  4. Uniquement Other case
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 9 sur 10

Une chaîne à quatre branches affiche l’une de quatre indications. Quatre entrées différentes affichent toutes la première indication. Combien de branches ces tests ont-ils couvertes ?
  1. Une branche
  2. Deux branches
  3. Trois branches
  4. Quatre branches
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 10 sur 10

Quel mot-clé introduit la condition supplémentaire après un motif dans case n ___ n > 4: ?
  1. and
  2. if
  3. as
  4. elif
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

55 Mots-Clés, chacun avec sa définition

A

Affectation
Une affectation stocke une valeur sous un nom de variable avec =, en remplaçant toute valeur déjà associée à ce nom.
L’affectation score = 28 modifie score ; écrire score == 28 ne fait que comparer sa valeur actuelle.
Algorigramme
Un algorigramme est un diagramme des chemins d’un programme qui représente une décision par un losange avec des chemins « vrai » et « faux » distincts vers l’action suivante.
Un algorigramme montre les deux chemins qui se rejoignent après le corps d’une décision à une branche sur une température.
Alternative
Une alternative choisit exactement l’un de deux chemins avec if et else, avec un corps à exécuter pour chacune des deux valeurs de vérité.
Une alternative affecte des frais de livraison sur les deux chemins avant l’affichage du total.
Aplatissement
L’aplatissement réécrit des décisions imbriquées avec moins de niveaux d’indentation tout en conservant les mêmes choix de branches et les mêmes actions.
L’aplatissement de deux vérifications avec une action commune peut remplacer l’imbrication par une condition and.

B

Bloc
Un bloc est un groupe d’instructions au même niveau d’indentation que Python traite comme le corps d’une instruction conditionnelle ou d’une autre instruction.
Deux appels indentés à print() sous un test de température se trouvent dans le bloc contrôlé par ce test.
Borne incluse
Une borne incluse est une limite qui appartient à l’intervalle accepté, exprimée avec <= ou >= dans une comparaison numérique.
La borne incluse dans age >= 18 permet à une personne âgée d’exactement 18 ans de satisfaire le test.
Branche else
Une branche else est le corps alternatif qui s’exécute lorsque la condition de son if correspondant est fausse ; l’en-tête else: n’a pas de condition.
Dans un test if sur les nombres pairs, la branche else s’exécute pour -7, car son reste n’est pas nul.
Branche inaccessible
Une branche inaccessible est une branche dans laquelle aucune entrée ne peut conduire l’exécution, car des décisions précédentes ou des exigences contradictoires l’empêchent toujours.
Une branche inaccessible apparaît lorsque elif score >= 90: suit le test plus large if score >= 60:.
Branche par défaut
Une branche par défaut traite les entrées que les cas précédents n’ont pas acceptées, comme un else final dans une instruction conditionnelle à plusieurs branches.
Une branche par défaut peut afficher "Unknown option" pour une saisie de menu autre que "1" ou "2".

C

Clause elif
Une clause elif ajoute une branche conditionnelle à une chaîne if et n’est examinée qu’après l’échec de toutes les conditions précédentes.
La clause elif pour les scores d’au moins 80 n’est atteinte qu’après l’échec du test pour 90.
Comparaison chaînée
Une comparaison chaînée réunit des comparaisons entre valeurs voisines dans une seule expression et ne réussit que si chaque comparaison de la chaîne réussit.
La comparaison chaînée 2 <= level <= 9 inclut 2 et 9, mais rejette un niveau de 10.
Comparaison sensible à la casse
Une comparaison sensible à la casse traite les majuscules et les minuscules comme des caractères différents lorsqu’elle vérifie l’égalité ou l’ordre de textes.
Une comparaison sensible à la casse rejette "Yes" lorsque le texte exact requis est "yes".
Condition de garde
Une condition de garde est une vérification placée avant une opération afin que l’évaluation en court-circuit puisse empêcher cette opération lorsqu’elle échouerait.
Une condition de garde teste count != 0 avant la division dans count != 0 and total / count > 10.
Condition externe
Une condition externe contrôle l’entrée dans un bloc qui contient une autre décision et détermine si le test interne est atteint.
Lorsque la condition externe has_ticket est fausse, la comparaison interne de l’âge est ignorée.
Conditions équivalentes
Des conditions équivalentes donnent la même valeur de vérité pour chaque combinaison autorisée de leurs entrées, même si leurs formes écrites diffèrent.
Les conditions équivalentes not (age >= 18) et age < 18 concordent pour tout âge entier.
Conjonction
Une conjonction est une condition reliée par and qui ne réussit que si les deux exigences sont satisfaites, comme les deux bornes d’un intervalle.
La conjonction age >= 13 and age <= 19 rejette les âges situés de part et d’autre de l’intervalle de l’adolescence.
Conversion de type
Une conversion de type crée une valeur d’un autre type, par exemple en transformant un texte composé de chiffres en entier avec int() avant de comparer des grandeurs.
La conversion de type dans level = int(input("Level: ")) rend possible un test de limite numérique.
Couverture des branches
La couverture des branches vérifie si les tests choisis ont exécuté chaque branche au moins une fois, y compris les branches par défaut et les branches imbriquées.
La couverture des branches d’une chaîne à quatre branches nécessite au moins quatre entrées qui prennent des chemins différents.

E

Expression conditionnelle
Une expression conditionnelle sélectionne et produit l’une de deux valeurs avec a if condition else b, en n’évaluant que la valeur sélectionnée.
L’expression conditionnelle fee = 0 if has_pass else 4 stocke 4 lorsque le pass est absent.

É

Évaluation en court-circuit
L’évaluation en court-circuit ignore un opérande booléen ultérieur lorsque l’opérande gauche a déjà déterminé si la condition est satisfaite.
L’évaluation en court-circuit ignore total / count après un test count != 0 faux relié par and.

G

Garde
Une garde est une condition 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.
La garde dans case n if n < 0: vérifie le nombre capturé avant de choisir le cas négatif.

I

Indentation
L’indentation est l’espace en début de ligne qui indique à quel bloc appartient une instruction ; la convention Python utilise 4 espaces par niveau.
Retirer un niveau d’indentation à print("Done") dans le corps d’un if le fait s’exécuter après toute la décision.
Instruction conditionnelle imbriquée
Une instruction conditionnelle imbriquée est une instruction conditionnelle placée dans une autre branche ; son test n’est donc atteint que lorsque l’exécution entre dans cette branche externe.
L’instruction conditionnelle imbriquée ne vérifie l’âge d’un visiteur qu’après la réussite de la vérification externe du billet.
Instruction if
Une instruction if vérifie une condition et n’exécute son corps indenté que lorsque la condition est une valeur vraie, puis continue après ce corps.
L’instruction if dont l’en-tête est if stock > 0: ignore son corps lorsque stock vaut zéro.
Instruction match
Une instruction match compare un sujet à des motifs de cas ordonnés et n’exécute que le corps du premier cas correspondant, puis continue.
L’instruction match pour "stop" ignore case "start": et exécute le corps sous case "stop":.
Instruction pass
Une instruction pass est une instruction valide qui n’effectue aucune action et permet à un bloc obligatoire d’exister avant que son code utile soit écrit.
Une instruction pass indentée garde valide le corps inachevé d’un if sans produire de sortie.

L

Lois de De Morgan
Les lois de De Morgan réécrivent un groupe booléen nié en niant chaque partie et en remplaçant and par or, ou inversement, tout en préservant sa valeur de vérité.
Les lois de De Morgan transforment not (A or B) en not A and not B, en inversant les deux parties.

M

Motif as
Un motif as nomme le sujet accepté par un motif plus précis, en conservant la valeur effective qui a correspondu pour l’utiliser dans le corps.
Le motif as dans case "y" | "yes" as reply: stocke "y" lorsque c’est la chaîne fournie.
Motif attrape-tout
Un motif attrape-tout est _, qui accepte tout sujet sans le nommer ; un cas attrape-tout sans garde doit apparaître en dernier.
Un motif attrape-tout affiche "Unknown command" lorsque les motifs de commandes fixées précédents échouent.
Motif de capture
Un motif de capture est un nom seul qui accepte tout sujet et l’affecte à ce nom, même si le nom stocke déjà une valeur.
Le motif de capture case STOP: remplace la valeur de STOP ; les majuscules ne le transforment pas en recherche de valeur.
Motif littéral
Un motif littéral vérifie un nombre fixé, une chaîne, un booléen ou None ; les littéraux numériques et les littéraux de chaîne sont comparés par égalité.
Le motif littéral case 6: accepte le nombre 6, mais rejette le texte "6" renvoyé par la saisie.
Motif OU
Un motif OU relie des motifs alternatifs avec | et réussit si l’une des alternatives correspond, avec un corps de cas partagé.
Le motif OU case "open" | "load": exécute le même corps pour l’une ou l’autre chaîne de commande.
Motif valeur
Un motif valeur est un nom en notation pointée qui recherche une valeur existante et lui compare le sujet par égalité, sans effectuer de capture.
Le 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
Un opérande est une valeur ou une expression sur laquelle agit un opérateur ; and et or renvoient l’un de leurs opérandes au lieu de toujours renvoyer un booléen.
L’opérande gauche de "" or "Guest" est une valeur fausse : l’expression renvoie donc l’opérande droit.
Opérateur booléen
Un opérateur booléen combine ou inverse des valeurs de vérité ; Python utilise les mots en minuscules and, or et not pour ces opérations.
Un opérateur booléen réunit les deux exigences de has_ticket and is_open dans un seul test.
Opérateur d’appartenance
Un opérateur d’appartenance vérifie si une valeur apparaît dans une autre ; pour les chaînes, in et not in testent des sous-chaînes exactes.
L’opérateur d’appartenance dans "rain" in "raincoat" trouve le texte et renvoie True.
Opérateur de comparaison
Un opérateur de comparaison vérifie l’égalité ou l’ordre de valeurs et produit un résultat booléen, comme <= lorsqu’il inclut une limite.
L’opérateur de comparaison dans weight <= 8 accepte un poids d’exactement 8 kilogrammes.
Ou inclusif
Un ou inclusif accepte l’une ou l’autre alternative et accepte aussi les deux ensemble ; le or booléen de Python suit ce sens.
Le ou inclusif permet à 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
Un point de code Unicode est le nombre attribué à un caractère ; Python utilise ces nombres pour comparer les chaînes de gauche à droite.
Le point de code Unicode de "Z" est inférieur à celui de "a" : "Zebra" < "apple" est donc vrai.
Priorité des opérateurs
La priorité des opérateurs détermine comment une expression regroupe ses opérateurs sans parenthèses supplémentaires, and étant regroupé avant or.
Selon la priorité des opérateurs, A or B and C se lit A or (B and C), sauf si des parenthèses changent le regroupement.
Pseudo-code
Le pseudo-code décrit les étapes d’un programme en langage courant, ce qui rend les choix prévus clairs avant leur écriture en syntaxe Python.
Avant de coder, le pseudo-code peut indiquer : « Rejeter un score hors de l’intervalle ; sinon, attribuer sa note ».

R

Règle de la première correspondance
La règle de la première correspondance sélectionne la première branche satisfaite dans une chaîne de décision et ignore toutes les conditions et tous les corps restants.
Selon la règle de la première correspondance, un score de 95 est retenu par >= 60 si ce test large apparaît en premier.

S

Seuil
Un seuil est une valeur à laquelle une décision change de résultat ; l’opérateur de comparaison détermine de quel côté cette valeur est incluse.
Un seuil de note de 90 attribue 90 à la catégorie supérieure lorsque le test est score >= 90.
Sujet
Le sujet est la valeur qu’une instruction match compare à ses motifs de cas ; il s’écrit après le mot-clé match dans l’en-tête.
Dans match command:, la valeur actuelle de command est le sujet utilisé pour chaque essai de cas.

T

Table de vérité
Une table de vérité présente chaque combinaison d’entrées booléennes et le résultat de chacune, ce qui permet de vérifier complètement une condition composée.
Une table de vérité à deux entrées comporte quatre lignes, dont le cas où les deux entrées sont vraies.
Tableau de suivi
Un tableau de suivi consigne les valeurs des variables, les conditions atteintes et les actions dans l’ordre d’exécution afin de suivre à la main le chemin d’un programme.
Un tableau de suivi indique que les tests de notes ultérieurs sont ignorés après qu’une branche précédente a affecté la note.
Test d’identité
Un test d’identité utilise is ou is not pour vérifier si des références désignent le même objet, souvent pour reconnaître None.
Le test d’identité result is None distingue un résultat manquant d’une valeur réelle égale à zéro.
Test de valeur limite
Un test de valeur limite vérifie une limite et des entrées proches pour détecter une comparaison qui inclut ou exclut la mauvaise borne.
Un test de valeur limite utilise 17, 18 et 19 pour vérifier une règle sur les entiers écrite age >= 18.
Tolérance
Une tolérance est l’écart accepté par une vérification numérique lorsque des valeurs calculées peuvent contenir de petites erreurs d’approximation.
Une tolérance de 1e-9 permet à abs(a - b) < 1e-9 d’accepter un minuscule écart entre des flottants calculés.

V

Valeur booléenne
Une valeur booléenne est l’une des deux valeurs True et False, que Python utilise pour exprimer le résultat d’un test auquel on répond par oui ou par non.
La valeur booléenne stockée par is_ready = count >= 4 vaut True lorsque count est égal à 4.
Valeur de vérité
La valeur de vérité est la valeur que Python utilise lorsqu’une valeur quelconque apparaît dans une condition, ce qui permet à des nombres ou à du texte de contrôler une branche.
La valeur de vérité permet à if name: de rejeter une réponse vide sans comparaison explicite avec "".
Valeur fausse
Une valeur fausse est une valeur qui fait échouer une condition, notamment zéro, None, False, le texte vide et les collections natives vides.
La valeur fausse zéro fait choisir la valeur par défaut à quantity or 1, même si zéro a été saisi intentionnellement.
Valeur par défaut
Une valeur par défaut est une valeur de repli utilisée lorsqu’une valeur préférée est absente ou inadaptée, comme un texte sélectionné par une expression or.
La valeur par défaut "Guest" est sélectionnée dans name or "Guest" lorsque name est la chaîne vide.
Valeur vraie
Une valeur vraie est une valeur qui satisfait une condition, notamment les nombres non nuls et les chaînes non vides, même celles qui indiquent le contraire.
La valeur vraie "False" satisfait if answer: car ses caractères rendent la chaîne non vide.
Validation des entrées
La validation des entrées vérifie si les données fournies satisfont les règles du programme avant leur utilisation pour une autre décision.
La validation des entrées avec 0 <= score <= 100 rejette 150 avant qu’une note puisse être attribuée.

À propos de cette unité

Par StudeliSignaler une erreur

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.

Commencer