Les conditions : si, sinon si, sinon
Ce que ce chapitre apporte 5 points
- Écrire une comparaison et ranger son résultat dans une variable Boolean.
- Choisir entre deux chemins avec le bloc If, et prévoir ce qui s'exécute dans chaque cas.
- Organiser plusieurs cas avec des If imbriqués, dans un ordre qui ne laisse aucune valeur sans réponse.
- Combiner des conditions avec and, or et not, en maîtrisant les priorités.
- Construire un jeu de valeurs qui passe par chaque chemin et teste chaque seuil.
Un programme qui exécute toujours les mêmes formes dans le même ordre ne sait réagir à rien. Dès qu'une mesure dépasse un seuil, qu'une vanne est ouverte ou qu'une pièce sort de ses tolérances, il doit choisir un chemin : c'est le rôle du losange If de Flowgorithm. Les décisions sont celles du pseudo-code, avec une différence de forme : le losange n'a que deux sorties, et le SinonSi s'y dessine par des losanges imbriqués. Ce chapitre apprend à écrire la question que pose le losange, et à organiser plusieurs cas sans en oublier ni en compter deux fois. Il apprend aussi à vérifier une décision là où elle se trompe le plus souvent : exactement au seuil.
Une question à réponse vraie ou fausse
Un capteur mesure la pression dans un réservoir d'air comprimé. La question « la pression dépasse-t-elle le seuil de sécurité ? » n'a que deux réponses possibles : oui ou non. Flowgorithm range ce genre de réponse dans une variable de type Boolean, qui ne peut valoir que true ou false.
Une comparaison confronte deux valeurs et produit un booléen : true si elle est vérifiée, false sinon. Le résultat peut être rangé dans une variable Boolean, ou utilisé directement comme condition d'un losange.
| Question | Écriture recommandée | Autre écriture acceptée |
|---|---|---|
| égal à | == | = |
| différent de | != | <> |
| strictement inférieur, inférieur ou égal | <, <= | |
| strictement supérieur, supérieur ou égal | >, >= |
La comparaison pression > seuil produit un booléen, rangé dans surpression puis affiché : « Surpression : true » pour 7.2. Relancer avec une pression de 5 : « Surpression : false ». En pas à pas, la variable apparaît en bleu-vert dans la fenêtre des variables.
Flowgorithm accepte = et == pour comparer : l'affectation a sa propre forme, le rectangle, et ne s'écrit pas dans un losange. Le rectangle affiche lui aussi un = (seuil = 6.5 sur la figure) : c'est la forme, et non le signe, qui dit s'il s'agit de ranger ou de comparer. Python, lui, réserve = au rangement et == à la comparaison, et la confusion y est une erreur classique. Ce cours écrit donc == dans les losanges, avec !=, and, or et not, qui sont aussi les écritures de Python. Deux règles de ce chapitre ne passent pourtant pas telles quelles en Python : elles sont signalées à leur place.
Pour charge = 30, laquelle de ces conditions est vraie ?
Le bloc If : deux chemins qui se rejoignent
Le losange porte une condition. Si elle vaut true, le programme prend la branche True, à droite ; si elle vaut false, la branche False, à gauche. Les deux chemins se retrouvent ensuite en un point de jonction, et le programme continue.
False à gauche, True à droite. Relancer avec une pression de 5 pour passer par l'autre branche : la dernière sortie s'affiche dans les deux cas.
Avec la saisie 7.2, la console affiche « Ouvrir la soupape de sécurité » puis « Contrôle terminé » ; avec 5, « Pression normale » puis « Contrôle terminé ». Ce qui est placé après la jonction ne dépend pas de la condition : une forme qui ne concerne qu'un cas va dans sa branche, jamais après.
Une branche peut rester vide : le chemin existe, mais il ne fait rien. C'est le cas le plus fréquent en surveillance, où rien n'est à faire tant qu'aucune anomalie n'apparaît.
La branche False est vide. Avec 5, le programme passe directement à la jonction, et soupapeOuverte garde la valeur false reçue avant le losange. Relancer avec 7.2 : l'alerte s'affiche, et la soupape passe à true.
La branche False d'un If est vide. Que fait le programme quand la condition est fausse ?
Plusieurs cas : des If imbriqués
Le niveau de charge d'une batterie de secours se classe en trois cas : critique sous 10 %, faible sous 30 %, correcte à partir de 30 %. Un losange n'a que deux sorties ; pour trois cas, un second losange se place dans une branche du premier.
Le second test n'est posé que si le premier est faux : arrivé là, la charge vaut déjà au moins 10. Essayer 5, 25 puis 80.
Le second losange n'a pas besoin de vérifier charge >= 10 : il ne s'exécute que dans la branche False du premier, donc quand la charge n'est pas sous 10. C'est tout l'intérêt de l'imbrication : chaque test hérite de ce que les précédents ont éliminé.
Le SinonSi du pseudo-code n'a pas de forme propre dans Flowgorithm : la palette n'offre aucun « sinon si ». Il s'y dessine exactement comme ci-dessus, par un second losange placé dans la branche False du premier. Le pseudo-code écrit Si charge < 10 … SinonSi charge < 30 … Sinon … et aligne les cas ; l'organigramme montre ce que cette écriture cache, un losange posé dans le « sinon » du précédent.
Inverser les deux tests (d'abord charge < 30, puis charge < 10) donne un programme qui s'exécute sans erreur et qui se trompe. Avec une charge de 5, le premier test est déjà vrai : le programme affiche « Charge faible », et le cas critique n'est jamais atteint. Avec des seuils « inférieur à », tester du plus petit au plus grand.
La même cascade, du plus grand seuil au plus petit. Exécuter avec 5 : la console affiche « Charge faible ». Essayer ensuite 35 : « Charge correcte ». Aucune saisie n'affiche « Charge critique ».
Rien ne signale la faute : le programme répond à chaque saisie, et la forme « Charge critique » reste sur un chemin qu'aucune valeur n'emprunte.
Chaque valeur doit tomber dans un seul cas. Trois If indépendants, posés l'un après l'autre, ne le garantissent pas :
Trois décisions indépendantes, toutes évaluées. Exécuter avec 5 : « Charge critique » puis « Charge faible », deux diagnostics pour une seule charge. Essayer 35 : un seul, parce que l'erreur ne touche que les charges sous 10.
Ce n'est pas une autre écriture du programme précédent. Dans la cascade imbriquée, la saisie 5 ne franchit qu'un seul losange : le diagnostic posé, le reste de l'organigramme n'est plus sur le chemin. Ici, les trois losanges sont franchis, parce qu'aucun n'est dans la branche d'un autre. En pas à pas, le surlignage atteint charge < 30 alors que « Charge critique » vient d'être affiché. Deux If successifs posent deux questions indépendantes ; deux If imbriqués ne posent la seconde qu'aux valeurs que la première n'a pas classées.
Python écrit une cascade sans l'imbriquer visuellement, avec elif (« sinon si »), comme le SinonSi du pseudo-code ; l'indentation remplace les branches du losange. Le elif correspond au losange placé dans la branche False du précédent.
Conditions composées
Un losange peut porter plus d'une comparaison, et la plupart des règles métier en demandent deux. Un bain de traitement thermique est correct si sa température est comprise entre 60 et 80 °C. Cette phrase contient deux comparaisons : la température est au moins 60, et elle est au plus 80. and exige que les deux conditions soient vraies ; or se contente d'une seule ; not inverse.
a | b | a and b | a or b | not a |
|---|---|---|---|---|
true | true | true | true | false |
true | false | false | true | false |
false | true | false | true | true |
false | false | false | false | true |
Ranger la condition dans dansPlage lui donne un nom : le losange se lit comme une phrase, et la réponse peut resservir plus loin sans réécrire la comparaison. Essayer 59, 60, 80 et 81.
60 <= temperature <= 80 n'est pas une double comparaison pour Flowgorithm : une comparaison y confronte deux valeurs, pas trois. Il évalue d'abord 60 <= temperature, qui produit un booléen, puis compare ce booléen, et non la température, à 80. Dans Flowgorithm, « compris entre » s'écrit avec deux comparaisons reliées par and.
Python fait exception : il lit 60 <= temperature <= 80 comme 60 <= temperature and temperature <= 80, et le parcours Python emploie cette écriture. La forme avec and reste juste dans les deux langages.
L'écriture mathématique soumise à l'interpréteur. Exécuter avec 72, une température pourtant dans la plage : le programme s'arrête sur le losange, sans avoir rien affiché.
Sur cette page, le message est « Comparaison impossible entre la valeur booléenne true et le nombre 80 » : 60 <= temperature a été évalué d'abord et a produit true, que rien ne permet de comparer à 80.
L'erreur inverse est plus sournoise, parce qu'elle ne provoque aucune erreur :
Une condition toujours vraie. Avec 95, le bain est jugé correct : toute température est au-dessus de 60 ou au-dessous de 80, et aucune saisie ne mène à la branche False. Une plage se décrit avec and.
Les priorités
Une expression ne s'évalue pas de gauche à droite, mais selon la priorité des opérateurs. De la plus forte à la plus faible : not, puis les calculs et &, puis les comparaisons, puis and, et enfin or. Conséquences :
capotOuvert or temperature > 90 and moteurActifse litcapotOuvert or (temperature > 90 and moteurActif), carandlie plus fort queor. Dès que les deux se mêlent, écrire les parenthèses qui disent l'intention.notest plus fort qu'une comparaison :not charge < 10s'évalue(not charge) < 10, etnotreçoit un nombre au lieu d'une condition. Écrirenot (charge < 10), ou plus simplementcharge >= 10. Python fait l'inverse et rangenotaprès les comparaisons :not charge < 10y signifienot (charge < 10). Les parenthèses rendent l'écriture juste dans les deux langages.- Nier une comparaison stricte fait apparaître l'égalité :
not (a > 10)équivaut àa <= 10, et non àa < 10. De même,not (a == b)équivaut àa != b.
Une seule expression, deux lectures. Saisir true, 95, puis false : capot ouvert, 95 °C, moteur à l'arrêt. Les deux sorties ne disent pas la même chose.
Le programme affiche « Sans parenthèses : true » puis « Avec parenthèses : false ». La première alerte se déclenche sur le seul capot ouvert ; la seconde exige en plus un moteur actif. Les parenthèses ne décorent pas l'expression, elles choisissent la règle appliquée.
Un not sans parenthèses. Exécuter : le programme s'arrête sur le losange, car not s'applique au nombre charge. Écrit not (charge < 10), le même losange afficherait « Charge suffisante » pour 25.
1.Dans Flowgorithm, comment écrire « la cote est comprise entre 19,95 et 20,05, bornes incluses » ?
2.Quelle condition équivaut à not (a > 10) ?
Les valeurs limites
Les règles métier s'écrivent en français, et c'est à la traduction que l'erreur se glisse. « Une pièce est refusée si sa masse dépasse 250 g » donne masse > 250 ; « refusée dès qu'elle atteint 250 g » donne masse >= 250. Les deux programmes répondent pareil pour 200 ou 300 g. Ils ne diffèrent qu'en un point : 250 exactement.
Une condition se teste sur trois valeurs, jamais sur une. Pour un seuil à 250 : une valeur en dessous, une au-dessus, et 250 exactement. Les deux premières ne prouvent rien, puisque les deux écritures y répondent pareil.
C'est la valeur limite qui départage, et c'est celle qu'on oublie de tester. La règle vaut pour tout le reste du parcours : un jeu d'essai sans ses valeurs limites ne vérifie presque rien.
« Refusée si la masse dépasse 250 g ». Exécuter avec 250 : la pièce est acceptée. La version avec >=, juste en dessous, ne répond autrement que dans ce seul cas.
« Refusée dès qu'elle atteint 250 g ». Exécuter avec 250 : la pièce est refusée. Relancer les deux organigrammes avec 200, puis avec 300 : ils répondent la même chose.
Entre ces deux organigrammes, une seule masse fait une différence, et le seul mot qui désigne le bon est celui de l'énoncé : « dépasse » ou « atteint ».
Un test avec 200 et 300 ne dit rien de la frontière. Pour vérifier une décision, construire un jeu de valeurs qui :
- passe au moins une fois par chaque chemin de l'organigramme ;
- prend exactement chaque seuil, puis une valeur juste en dessous et une juste au-dessus.
Pour la batterie (seuils 10 et 30), les trois valeurs de chaque seuil suffisent, et elles passent déjà par les trois chemins :
| Charge saisie | Chemin attendu | Ce que la valeur vérifie |
|---|---|---|
| 9 | Charge critique | juste sous le premier seuil |
| 10 | Charge faible | le premier seuil exactement |
| 11 | Charge faible | juste au-dessus du premier seuil |
| 29 | Charge faible | juste sous le second seuil |
| 30 | Charge correcte | le second seuil exactement |
| 31 | Charge correcte | juste au-dessus du second seuil |
Des valeurs loin des seuils, comme 5 ou 80, empruntent les mêmes chemins et ne vérifient rien de plus. Chaque ligne s'obtient en relançant l'organigramme de la batterie avec la saisie correspondante. Si l'énoncé disait « critique jusqu'à 10 % inclus », la ligne 10 devrait donner « Charge critique », et c'est elle seule qui révélerait l'erreur.
Dans la cascade de la batterie (d'abord charge < 10, puis charge < 30), qu'affiche le programme pour une charge de 10 ?
Fil rouge : la cuve de traitement
Étape 3 : la cuve calcule son taux de remplissage (étape 2). Elle doit maintenant en tirer deux décisions.
- Le diagnostic, trois cas donc deux
Ifimbriqués : « Débordement imminent » au-dessus du seuil haut (90 %), « Niveau bas » en dessous du seuil bas (10 %), « Niveau normal » sinon. - La pompe de remplissage, une condition composée rangée dans une variable : autorisée seulement si le taux est sous le seuil haut et que la vanne de sortie est fermée. L'opérateur saisit l'état de la vanne (
truesi elle est fermée).
Étape 3 du fil rouge. Saisies proposées : rayon 1.5, hauteur 4, 26000 litres, vanne fermée. Relancer avec 12000 litres, puis avec la vanne ouverte (false).
Avec les saisies proposées, le programme affiche « Taux de remplissage : 92.0 % », « Débordement imminent » et « Pompe de remplissage bloquée » : la vanne est fermée, mais la cuve est trop pleine. Avec 12000 litres et la vanne fermée, il affiche « Taux de remplissage : 42.4 % », « Niveau normal » et « Pompe de remplissage autorisée ».
Au seuil haut exactement, pour un taux de 90 % tout juste, le diagnostic dirait « Niveau normal » (taux > 90 est faux) et la pompe serait bloquée (taux < 90 est faux aussi). Les deux décisions respectent leurs règles : « au-dessus du seuil » et « sous le seuil » excluent tous deux l'égalité.
Ce cas ne se provoque pas sur cette figure. La capacité fait intervenir π, et aucun nombre rond de litres ne donne un taux d'exactement 90 %. Le plus proche au dixième de litre, 25446.9 litres, affiche « Taux de remplissage : 90.0 % », mais ToFixed a arrondi l'affichage : le taux vaut en réalité 89,999998 %, un peu moins que 90, et la pompe est autorisée. Un affichage arrondi ne dit donc pas de quel côté du seuil se trouve la valeur. L'étape 7, au dernier chapitre du parcours, contourne la difficulté en essayant le diagnostic seul, sur un taux saisi directement.
1.Que vaut true and (false or true) ?
2.Avec 12000 litres, le taux vaut 42,4 % et la vanne est ouverte (false). Que décide le programme pour la pompe ?
Mettre en pratique
Le test écrit par le technicien. Prévoir la réponse pour 19.95, pour 20 et pour 20.05 avant de déplier.
Un arbre usiné est conforme si son diamètre est compris entre 19,95 et 20,05 mm, bornes incluses. Qu'affiche le test ci-dessus pour 19.95, 20 et 20.05, et comment le corriger ?
Les deux comparaisons sont reliées par and, ce qui est juste pour une plage. Mais elles sont strictes : pour 19.95, diametre > 19.95 est faux, donc toute la condition est fausse. Le programme affiche Rebut pour 19.95, Conforme pour 20, Rebut pour 20.05.
Deux pièces conformes sont mises au rebut, et un essai avec 20 seulement ne l'aurait jamais montré. « Bornes incluses » se traduit par diametre >= 19.95 and diametre <= 20.05, et seuls les deux seuils pris exactement révèlent la différence entre les deux versions.
Le test corrigé. Exécuter avec 19.95, puis 20.05 : « Conforme » les deux fois. Relancer avec 20.06 : « Rebut », la borne haute reste une frontière.
Au péage d'un pont, un véhicule léger (catégorie 1) paie 4 € le jour et 3 € la nuit ; un poids lourd (catégorie 2) paie 10 € le jour et 7 € la nuit. La nuit commence à 22 h et finit avant 6 h. Dessiner, sur papier ou dans Flowgorithm, l'organigramme qui lit la catégorie et l'heure (entier de 0 à 23), puis donner le tarif affiché pour un poids lourd à 22 h et un véhicule léger à 5 h.
La nuit se décrit par une condition composée : l'heure est avant 6 ou à partir de 22. C'est bien or : aucune heure ne peut être à la fois inférieure à 6 et supérieure ou égale à 22. Ranger cette condition dans nuit évite de la réécrire dans chaque branche.
La catégorie choisit la grille, la variable nuit choisit le tarif dans la grille. Exécuter avec la catégorie 2 à 22 heures, puis essayer la catégorie 1 à 14 heures : quatre combinaisons, quatre tarifs.
Pour un poids lourd à 22 h, l'organigramme affiche Tarif : 7 euros ; pour un véhicule léger à 5 h, Tarif : 3 euros. 22 est un seuil : avec heure > 22, le poids lourd de 22 h paierait le tarif de jour. Autre limite du programme : toute catégorie autre que 1 passe par la branche False et paie comme un poids lourd, ce qu'une saisie de contrôle hors des valeurs prévues (3, par exemple) montre immédiatement.
Chapitre révisé en octobre 2026 · Une erreur dans ce chapitre ?
Dans la bibliothèque d'exercices
Évaluer une condition, suivre le bon chemin, tester les valeurs limites.
- Suivre une cascade de décisionsNiveau 1
- Évaluer une condition composéeNiveau 2
- Compter les lignes affichéesNiveau 2
- Une erreur au seuilNiveau 2
- Construire une régulation de chauffageNiveau 3
- Construire le contrôle d'une pièce usinéeNiveau 2
- Construire l'alerte de niveau d'une cuveNiveau 3
- Corriger le démarrage d'un ventilateurNiveau 3