Prendre des décisions (if / else) Tuto

Prendre des décisions (if / else)

Durée estimée
10 minutes
Votre progression

Créez un compte gratuit pour suivre votre avancement et reprendre où vous avez laissé.

Créer un compte

Faire prendre des décisions à ton programme

Jusqu'ici, tes programmes faisaient toujours la même chose, peu importe les valeurs. Dans cette fiche, tu vas apprendre à les rendre intelligents : afficher un message différent selon l'âge, donner une mention différente selon la note, choisir un message d'encouragement selon le score… bref, réagir aux données.

À la fin, tu sauras tester une condition, écrire un bloc if, proposer une alternative avec else, enchaîner plusieurs cas avec elif, et combiner des conditions avec and, or et not.

Remarque

Comment lire cette fiche. Tu vas rencontrer deux types d'exercices à la suite des explications :

  • Complète le programme — 1 ou 2 mots à compléter, juste après chaque nouveau concept.
  • À toi de jouer — un petit programme à finir, en fin de section.

Chaque cellule s'exécute en cliquant sur Exécuter. En cas d'erreur, lis le message rouge : il indique la ligne fautive et le type d'erreur.

Tester une condition : les booléens

Une condition est une expression qui vaut soit True (vrai), soit False (faux). Ces deux valeurs forment le type booléen (du nom du mathématicien George Boole). Pour comparer deux valeurs, Python utilise les opérateurs suivants :

Opérateur Sens Exemple Résultat
== est égal à 7 == 7 True
!= est différent de 7 != 5 True
< est inférieur à 3 < 10 True
> est supérieur à 3 > 10 False
<= est inférieur ou égal à 5 <= 5 True
>= est supérieur ou égal à 5 >= 6 False

Teste ces comparaisons :


            

Observe la dernière ligne : Python distingue les majuscules des minuscules. "Léa" et "léa" ne sont pas égaux pour lui.

Complète le programme

Compare 12 et 12 avec l'opérateur d'égalité :


        
Voir la solution
print(12 == 12)

Complète le programme

Vérifie si 100 est strictement supérieur à 99 :


        
Voir la solution
print(100 > 99)

À toi de jouer

Crée une variable age valant 15. Affiche, dans cet ordre, le résultat de trois tests : est-ce que l'âge est majeur (≥ 18) ? Est-ce qu'il est différent de 18 ? Est-ce qu'il est égal à 15 ?


        
Voir la solution
age = 15
print(age >= 18)
print(age != 18)
print(age == 15)

Remarque

Spécificité Python — = vs ==. Un seul = affecte une valeur à une variable (x = 5). Deux == testent l'égalité et renvoient True ou False. Confondre les deux est l'erreur la plus fréquente. Pour t'en souvenir : un seul signe pour donner, deux signes pour comparer.

Le bloc if : exécuter conditionnellement

Un test seul ne change rien au programme. Pour agir selon le résultat, on l'enferme dans un bloc if (« si » en anglais). La syntaxe est :


            

Trois choses à remarquer :

  • La ligne if note >= 10: se termine par deux points : — c'est obligatoire.
  • La ligne print("Validé !") est indentée (décalée vers la droite) de 4 espaces. C'est elle qui appartient au bloc.
  • La ligne print("Fin du programme.") n'est pas indentée : elle s'exécute toujours, que la condition soit vraie ou non.

Change note à 7 et ré-exécute : le mot « Validé ! » disparaît, mais « Fin du programme. » reste.

Complète le programme

Complète la condition pour que le message s'affiche uniquement si l'âge est majeur (≥ 18) :


        
Voir la solution
age = 20
if age >= 18:
    print('Tu es majeur.')

Complète le programme

Affiche « Bravo ! » uniquement quand le score atteint 100 :


        
Voir la solution
score = 100
if score == 100:
    print('Bravo !')

À toi de jouer

Crée une variable temperature valant 32. Si elle dépasse 30, affiche « Il fait chaud ! ». Quoi qu'il arrive, affiche en dernière ligne la valeur de la température.


        
Voir la solution
temperature = 32
if temperature > 30:
    print('Il fait chaud !')
print(temperature)

Remarque

Spécificité Python — l'indentation porte du sens. Dans la plupart des langages (C, Java, JavaScript), on délimite les blocs avec des accolades { }. En Python, c'est l'indentation seule qui dit ce qui appartient au bloc. Mal indenter ne produit pas seulement du code laid : ça produit une IndentationError ou, pire, un programme qui ne fait pas ce que tu crois. Convention universelle : 4 espaces par niveau, jamais de tabulations mélangées.

if / else : deux chemins possibles

Souvent, on veut faire une chose si la condition est vraie, et autre chose sinon. C'est le rôle de else (« sinon ») :


            

Le bloc else s'écrit au même niveau d'indentation que le if, suivi de deux points, et son contenu est indenté à son tour. Exactement un seul des deux blocs s'exécute, jamais les deux.


            

Complète le programme

Affiche « positif » si le nombre est strictement positif, sinon « négatif ou nul » :


        
Voir la solution
x = 7
if x > 0:
    print('positif')
else:
    print('négatif ou nul')

Complète le programme

Complète pour afficher « accès autorisé » si le mot de passe vaut "python42", sinon « accès refusé » :


        
Voir la solution
mot_de_passe = 'python42'
if mot_de_passe == 'python42':
    print('accès autorisé')
else:
    print('accès refusé')

À toi de jouer

Écris un programme qui, à partir d'une variable annee valant 2024, affiche « bissextile » si l'année est divisible par 4, et « non bissextile » sinon. (Indice : annee % 4 == 0.)


        
Voir la solution
annee = 2024
if annee % 4 == 0:
    print('bissextile')
else:
    print('non bissextile')

Remarque

Spécificité Python — pas de parenthèses autour de la condition. Contrairement au C ou au JavaScript où l'on écrit if (x > 0) { ... }, Python n'exige ni parenthèses ni accolades : juste la condition, le :, et l'indentation. Tu peux mettre des parenthèses si la condition est longue (ça ne dérange pas Python), mais ce n'est pas l'idiome.

if / elif / else : enchaîner plusieurs cas

Quand il y a plus de deux possibilités, elif (contraction de « else if ») permet d'ajouter des cas intermédiaires. On peut en mettre autant qu'on veut :


            

Python teste les conditions de haut en bas et s'arrête au premier elif vrai. Les suivants ne sont même pas évalués. C'est pour cela que l'ordre des tests compte : si tu mets if note >= 10 en premier, tu ne verras jamais « Très bien ».


            

Complète le programme

Complète le code pour qu'il affiche « négatif », « nul » ou « positif » selon la valeur de x :


            

Complète le programme

Complète l'ordre des tests pour que toutes les mentions soient atteignables :


        
Voir la solution
note = 17
if note >= 16:
    print('TB')
elif note >= 14:
    print('B')
elif note >= 12:
    print('AB')
else:
    print('Sans')

À toi de jouer

Écris un programme qui, à partir d'une variable age valant 15, affiche : « enfant » si l'âge est strictement inférieur à 12, « ado » s'il est entre 12 et 17 inclus, « adulte » s'il est entre 18 et 64 inclus, et « senior » sinon.


            

Remarque

Spécificité Python — pas de switch historiquement. Pendant trente ans, Python n'a eu ni switch (C, Java) ni case (Pascal). La cascade if / elif / else suffisait. Depuis Python 3.10 (2021), le mot-clé match existe et permet du « pattern matching » bien plus puissant qu'un simple switch — on en parle dans la section approfondissement.

Combiner des conditions : and, or, not

Souvent, une décision dépend de plusieurs conditions à la fois. Python propose trois opérateurs logiques, et il utilise les mots anglais (pas les symboles `&&`, `||`, `!` du C/JavaScript) :

Opérateur Sens Exemple
and et (les deux vraies) age >= 12 and age < 18
or ou (au moins une vraie) jour == 'samedi' or jour == 'dimanche'
not non (négation) not connecte

            

            

Complète le programme

Complète pour afficher « ado » uniquement si l'âge est compris entre 12 et 17 inclus :


            

Complète le programme

Complète pour autoriser l'accès si l'utilisateur est admin ou s'il a au moins 18 ans :


        
Voir la solution
age = 20
admin = False
if admin or age >= 18:
    print('accès autorisé')

À toi de jouer

Écris un programme qui, à partir de trois variables age (= 16), argent (= 8) et place_dispo (= True), affiche « bienvenue » si l'âge est ≥ 12, l'argent ≥ 5, et qu'il reste de la place. Sinon, affiche « refusé ».


        
Voir la solution
age = 16
argent = 8
place_dispo = True
if age >= 12 and argent >= 5 and place_dispo:
    print('bienvenue')
else:
    print('refusé')

Remarque

Spécificité Python — l'évaluation paresseuse. Quand Python évalue A and B, si A est faux, il n'évalue même pas B : le résultat est forcément faux. C'est ce qu'on appelle le court-circuit. Pareil pour or : si la première partie est vraie, la seconde n'est pas testée. C'est très utile pour écrire des conditions du style if x != 0 and 10 / x > 1 sans risquer de division par zéro.

Pour aller plus loin

La vérité Python — if x: sans comparaison. En Python, toute valeur peut être utilisée comme une condition, pas seulement les booléens. Sont considérées comme fausses : False, None, 0, 0.0, la chaîne vide "" et la liste vide []. Tout le reste est vrai. Cela permet d'écrire des conditions très concises :


            

Tu peux donc écrire if liste: au lieu de if len(liste) != 0:. C'est l'idiome standard.

Comparaisons chaînées — Python comprend les maths. Tu peux écrire 0 < x < 10 exactement comme en mathématiques. C'est strictement équivalent à 0 < x and x < 10, mais bien plus lisible. Aucun autre langage grand public n'autorise cette syntaxe :


            

L'opérateur ternaire — un if/else sur une seule ligne. Quand un if/else sert juste à choisir entre deux valeurs, Python propose une écriture compacte :


            

L'ordre est inhabituel : valeur si vrai, puis if condition, puis valeur sinon. C'est une expression (qui produit une valeur), pas une instruction.

À toi de jouer

Récris ce programme en utilisant l'opérateur ternaire (une seule ligne pour choisir le message), puis affiche le résultat :


        
Voir la solution
x = -3
message = 'positif' if x >= 0 else 'négatif'
print(message)

match / case — le pattern matching (Python 3.10+). Quand on a beaucoup de cas exacts à tester, match est plus lisible qu'une cascade de elif. Le wildcard _ joue le rôle du else :


            

Comparaison avec les autres langages. Là où le C écrit if (x > 0 && x < 10) avec parenthèses obligatoires, symboles && et accolades, Python écrit simplement if 0 < x < 10:. Plus court, plus proche de la notation mathématique, et le compilateur n'a même pas besoin d'analyser un type booléen primitif différent du reste — tout est dynamique.

Ce que tu as appris

  • Une condition est une expression qui vaut True ou False. Les comparaisons s'écrivent avec ==, !=, <, >, <=, >=.
  • Le bloc if condition: exécute son contenu uniquement si la condition est vraie. Le contenu est indenté de 4 espaces.
  • else: propose un chemin alternatif ; elif condition: enchaîne plusieurs cas, testés de haut en bas.
  • Les opérateurs logiques and, or, not combinent des conditions. L'évaluation est paresseuse : Python s'arrête dès qu'il a la réponse.
  • Toute valeur Python a une vérité (truthy/falsy) : 0, "", [], None sont fausses ; le reste est vrai.
  • Les comparaisons chaînées (0 < x < 10) et l'opérateur ternaire (a if c else b) rendent le code plus lisible.

Et après…

Tu vas apprendre à répéter des instructions avec while et for, et tu construiras ton premier mini-jeu : « devine le nombre » avec un peu de hasard.