Première · Langages et programmation

Conditions et expressions conditionnelles

Un automate ne sait pas ce que signifie « assez grand » ou « presque terminé ». Il lui faut une condition précise. La programmation conditionnelle consiste à transformer une règle compréhensible par un humain en décisions sans oubli ni ambiguïté.

SofienAvec SofienIngénieur et enseignant en informatique
Dans ce chapitre

Un cap pour ce chapitre

Ce que vous saurez faire

  • Construire des conditions couvrant tous les cas
  • Interpréter une chaîne if elif else
  • Choisir les bornes et les opérateurs logiques
Les bases utiles pour commencer

Une condition produit une réponse de vérité

Une comparaison comme age >= 12 produit True ou False. Les comparateurs usuels sont ==, !=, <, <=, > et >=. Attention à la frontière : age > 12 exclut exactement 12, alors que age >= 12 l’inclut. Le programme ne peut pas décider à votre place ce que « à partir de douze ans » signifie. Commencez donc par écrire la règle en français avec ses bornes, puis traduisez-la. Les textes se comparent aussi, mais l’ordre obtenu suit des règles de comparaison de caractères, pas nécessairement l’ordre d’un dictionnaire humain.

Un booléen peut être mémorisé dans un nom descriptif : mineur = age < 18. Ce nom conserve le résultat du test à cet instant. Si age change ensuite, il faut réévaluer la comparaison pour actualiser mineur. L’affectation et la condition obéissent ainsi au même modèle de lecture immédiate des valeurs.

Choisir une branche et une seule

Une structure if suivie de elif puis else examine les conditions dans l’ordre. Dès qu’une condition est vraie, son bloc est exécuté et les autres branches sont ignorées. Le bloc else recueille les cas qui n’ont satisfait aucune condition précédente. L’indentation indique les instructions appartenant à chaque bloc ; elle fait partie de la syntaxe. Dans un classement par seuils, l’ordre est donc décisif : si l’on teste d’abord note >= 10, une note de 18 entre dans cette branche et n’atteint jamais une branche ultérieure note >= 16.

Une branche peut contenir plusieurs instructions, toutes indentées de la même façon. Une instruction revenue au niveau du if est exécutée après la chaîne, quelle que soit la branche choisie. Tracer les valeurs des variables, puis les messages affichés, permet de distinguer un calcul conditionnel d’un affichage commun.

Combiner plusieurs critères

and demande que les deux conditions soient vraies, or qu’au moins l’une le soit, et not inverse la valeur de vérité. Pour accepter une température comprise entre 18 et 25 inclus, on peut écrire 18 <= temperature <= 25. On peut aussi écrire temperature >= 18 and temperature <= 25. La version avec or accepterait presque toute température : 40 satisfait déjà la première partie. Décrire un contre-exemple est souvent la manière la plus rapide de repérer une combinaison incorrecte.

temperature = 22
if temperature < 18:
    message = "Chauffer"
elif temperature <= 25:
    message = "Maintenir"
else:
    message = "Refroidir"
print(message)

Python évalue ces opérateurs de gauche à droite et peut éviter la seconde expression. Dans diviseur != 0 and total / diviseur > 5, la division n’est calculée que si le diviseur est non nul. Inverser les deux tests perdrait cette protection. Ce comportement se nomme évaluation en court-circuit.

Vérifier la couverture et les frontières

Une bonne vérification sélectionne une valeur au-dessous, exactement sur et au-dessus de chaque seuil. Pour deux seuils 18 et 25, on peut examiner 17, 18, 19, 24, 25 et 26. Il faut aussi décider quelles valeurs sont valides avant de les classer : une note négative ne doit pas devenir simplement « insuffisante » si l’on attend une note de zéro à vingt. Plusieurs if indépendants peuvent tous exécuter leur bloc ; c’est utile pour des messages cumulables, mais différent d’une chaîne qui choisit une seule catégorie.

Une table de décision associe les situations importantes aux sorties attendues avant l’écriture du code. Deux entrées peuvent être différentes mais suivre la même branche. On cherche donc des représentants de chaque catégorie, plus les frontières et les entrées invalides, plutôt qu’un grand nombre de valeurs prises au hasard.

Une tarification construite par étapes

Un musée demande zéro euro avant six ans, quatre euros de six à dix-sept ans inclus et neuf euros à partir de dix-huit ans. On suppose d’abord un âge entier positif ou nul. Les seuils se lisent en ordre croissant : if age < 6, puis elif age < 18, puis else. Dans la deuxième branche, on sait déjà que l’âge est au moins six, car le premier test était faux. Il est donc inutile de répéter cette limite.

Pour cinq, six, dix-sept et dix-huit ans, les prix sont respectivement zéro, quatre, quatre et neuf euros. L’âge négatif nécessite une validation préalable distincte. On peut ensuite appliquer une réduction dans un second bloc, si elle doit modifier le prix quel que soit l’âge.

Nier une règle sans perdre une possibilité

Si une valeur est valide lorsque 0 <= mesure <= 100, elle est invalide lorsque mesure < 0 or mesure > 100. Sortir de l’intervalle peut se produire par l’un ou l’autre côté : exiger simultanément les deux serait impossible. Cette reformulation aide à rédiger des contrôles d’entrée lisibles.

Pour une autorisation exigeant une inscription et une place disponible, un refus survient si l’inscription manque ou si aucune place n’est disponible. On peut vérifier les quatre combinaisons de ces deux critères. Écrire cette table avant le programme évite de traiter seulement le cas où tout va bien. Quand une règle comporte plusieurs exceptions, des conditions nommées et des parenthèses explicites facilitent davantage la lecture qu’une longue expression compacte.

À vous de faire varier les choses

Le thermostat a-t-il une faille ?

Changez la température et la règle. Observez les deux comparaisons et le message produit, notamment à 18 et 25 degrés.

Lire le résultat de l’expérience initiale

Confort accepté

Les deux contraintes imposent une plage fermée de 18 à 25.

TestRésultat
t >= 18true
t <= 25true

Un exemple favorable ne suffit pas : les frontières et les contre-exemples révèlent le sens exact d’une condition.

De la compréhension à l’autonomie

À vous de résoudre

Cherchez d’abord par vous-même. Vérifiez les résultats demandés, utilisez les indices si nécessaire, puis comparez votre méthode à la correction.

Exercice 1 · S’entraîner#

Une borne oubliée

Une réduction est accordée aux personnes de moins de 18 ans. Donnez la condition correcte, puis les résultats pour 17, 18 et 19 ans.

Indice 1

Moins de signifie une inégalité stricte.

Indice 2

Une personne qui vient d’avoir 18 ans ne satisfait plus la règle.

Comprendre la correction

La condition est age < 18. Elle vaut True pour 17, puis False pour 18 et 19. Écrire age <= 18 élargirait la réduction aux personnes de 18 ans. Ce n’est pas une simple différence de notation : cela change le service rendu par le programme.

Exercice 2 · S’entraîner#

Le mauvais ordre

Un programme teste note >= 10 pour afficher « admis », puis elif note >= 16 pour afficher « mention ». Qu’affiche-t-il pour 18 ? Corrigez.

Indice 1

Une chaîne s’arrête après sa première condition vraie.

Indice 2

Testez le cas le plus exigeant avant le cas plus large.

Comprendre la correction

Pour 18, note >= 10 est vraie : le programme affiche « admis » et ignore le elif. On place donc d’abord if note >= 16, puis elif note >= 10, puis else pour les notes inférieures. La classe la plus restreinte doit être reconnue avant celle qui l’englobe.

Exercice 3 · S’entraîner#

Une plage presque infinie

Un capteur doit accepter les valeurs entre 0 et 100 inclus. Un élève propose valeur >= 0 or valeur <= 100. Donnez un contre-exemple et corrigez.

Indice 1

Essayez une valeur clairement hors de la plage.

Indice 2

Pour accepter, les deux contraintes doivent être satisfaites simultanément.

Comprendre la correction

La valeur 150 est acceptée car 150 >= 0 est vraie, même si l’autre comparaison est fausse. La valeur - 8 serait aussi acceptée par la deuxième partie. Il faut écrire valeur >= 0 and valeur <= 100, ou 0 <= valeur <= 100, afin d’imposer les deux limites.

Exercice 4 · S’entraîner#

Des messages cumulables

Une application affiche « batterie faible » si batterie < 20 et « stockage plein » si libre == 0. Pourquoi deux if conviennent-ils mieux qu’un if suivi de elif ?

Indice 1

Les deux problèmes peuvent se produire en même temps.

Indice 2

Testez batterie = 8 et libre = 0.

Comprendre la correction

Avec deux if, les deux messages apparaissent pour batterie = 8 et libre = 0. Avec elif, la première condition vraie masque la seconde alerte. Le choix de la structure dépend de la règle attendue : une seule catégorie appelle souvent if / elif / else ; plusieurs alertes indépendantes appellent plusieurs if.

Exercice 5 · Approfondir et relier#

Un tarif aux frontières

Une piscine refuse les âges négatifs, facture 3 euros avant 12 ans, 5 euros de 12 à 17 ans et 8 euros à partir de 18 ans. Proposez l’ordre des tests. Donnez ensuite les sorties pour -1, 11, 12, 17 et 18.

Indice 1

La validation doit précéder la tarification.

Indice 2

Dans une chaîne, les tests précédents faux fournissent déjà une borne inférieure.

Comprendre la correction

On teste age < 0 pour refuser, puis age < 12 pour 3 euros, puis age < 18 pour 5 euros, et enfin on facture 8 euros. Les sorties sont refus, 3, 5, 5 et 8. Tester directement age < 12 en premier attribuerait à tort un prix à -1.

Exercice 6 · Approfondir et relier#

Deux alertes, puis une décision

Un local déclenche une alerte si la température dépasse 30, et une autre si la fumée est détectée. L’évacuation est demandée si au moins une alerte existe. Pour température 32 et fumée vraie, combien de messages d’alerte faut-il produire ? Proposez les trois conditions.

Indice 1

Les deux alertes peuvent être simultanées.

Indice 2

La décision d’évacuer combine les deux critères par or.

Comprendre la correction

Deux if indépendants produisent deux messages : l’un teste temperature > 30, l’autre fumee. La décision utilise temperature > 30 or fumee. Avec elif, l’alerte fumée serait masquée lorsque la température est déjà trop haute. Avec and pour évacuer, une fumée seule ne suffirait plus, contrairement à la règle.

Exercice 7 · Approfondir et relier#

Autoriser une réservation

Une réservation est autorisée si des places restent et si la personne est soit adhérente, soit accompagnée. Construisez la condition. Étudiez les cas (places 0, adhérente vraie, accompagnée vraie) puis (places 2, adhérente fausse, accompagnée vraie). Niez ensuite la règle.

Indice 1

Regroupez les deux possibilités concernant la personne.

Indice 2

Le manque de places suffit toujours à refuser.

Comprendre la correction

La condition est places > 0 and (adherente or accompagnee). Le premier cas est refusé car aucune place ne reste ; le second est accepté grâce à l’accompagnement. Le refus s’écrit places <= 0 or (not adherente and not accompagnee). Les parenthèses rendent explicite que la disponibilité reste obligatoire pour les deux profils.

Les erreurs qui méritent un détour

Employer and à la place de or
Reformulez la règle puis testez une situation où un seul critère est vrai.
Oublier les valeurs invalides
Séparez la validation de l’entrée et son classement lorsque le domaine est restreint.

La fiche à garder

L’essentiel à retenir

  • Une chaîne conditionnelle retient sa première branche vraie.
  • Tester les frontières fait partie de la vérification.
  • L’ordre et la combinaison des critères changent le comportement.

Cette notion au bac

Retrouvez ces idées dans un sujet complet, avec des indices, une correction expliquée et des ateliers.

Le prochain pas

Retrouver le catalogue de Première

Ce chapitre s’appuie sur le programme officiel de Première (PDF, nouvel onglet). Les explications et exercices sont proposés pour l’apprentissage.