Leçon 3/9 9 min

Conditions et boucles

if/elif/else, les opérateurs de comparaison et booléens, les boucles for et while, range(), break et continue.

FR EN

if / elif / else : prendre une décision

Jusqu'ici, votre code s'exécute ligne après ligne, sans jamais dévier. Une condition permet d'exécuter du code seulement si quelque chose est vrai. Le mot-clé de base est if :

age = 20

if age >= 18:
    print("Vous êtes majeur")

Pour traiter plusieurs cas, on enchaîne avec elif (« sinon si ») et on termine par else (« sinon ») :

note = 14

if note >= 16:
    print("Très bien")
elif note >= 12:
    print("Bien")
elif note >= 10:
    print("Passable")
else:
    print("Insuffisant")
# Affiche : Bien

Python teste chaque condition dans l'ordre et s'arrête dès qu'une est vraie. Les blocs elif et else sont optionnels : un if peut vivre tout seul.

L'indentation FAIT le bloc. Contrairement à d'autres langages qui utilisent des accolades { }, Python délimite les blocs avec l'indentation : 4 espaces. Tout ce qui est indenté sous le if appartient au if. Dès qu'on revient à la marge, on sort du bloc. Le deux-points : en fin de ligne annonce le bloc qui suit.

if age >= 18:
    print("Cette ligne est DANS le if")
    print("Celle-ci aussi (même indentation)")
print("Celle-ci est DEHORS, elle s'affiche toujours")

Comparer et combiner

Une condition repose sur une comparaison qui vaut True ou False. Voici les six opérateurs :

  • == : égal à
  • != : différent de
  • < : inférieur à
  • > : supérieur à
  • <= : inférieur ou égal
  • >= : supérieur ou égal

On combine plusieurs conditions avec les opérateurs booléens and (et), or (ou) et not (négation) :

age = 25
abonne = True

# and : les DEUX doivent être vraies
if age >= 18 and abonne:
    print("Accès autorisé")

# or : AU MOINS UNE doit être vraie
if age < 12 or age >= 65:
    print("Tarif réduit")

# not : inverse la valeur
if not abonne:
    print("Pensez à vous abonner")
# Affiche : Accès autorisé

Piège classique : = n'est pas ==. Le simple = est une affectation (« range cette valeur dans la variable »), alors que le double == est une comparaison (« est-ce que c'est égal ? »). Écrire if age = 18: provoque une SyntaxError. Dans une condition, on veut toujours ==.

La boucle for : répéter

Une boucle répète un bloc de code. La boucle for parcourt une séquence, un élément à la fois. La fonction range(n) génère les nombres de 0 à n - 1 :

for i in range(5):
    print(i)
# Affiche 0, 1, 2, 3, 4 (pas 5 !)

On parcourt aussi directement une liste, sans s'occuper des indices :

fruits = ["pomme", "banane", "cerise"]

for fruit in fruits:
    print(f"J'aime la {fruit}")
# J'aime la pomme
# J'aime la banane
# J'aime la cerise

Si vous avez besoin de l'indice et de l'élément en même temps, enumerate() fait les deux :

for i, fruit in enumerate(fruits):
    print(f"{i}: {fruit}")
# 0: pomme
# 1: banane
# 2: cerise

while, break et continue

La boucle while répète tant qu'une condition reste vraie. Pratique quand on ne sait pas à l'avance combien de tours il faudra :

compteur = 0

while compteur < 3:
    print(f"Tour numéro {compteur}")
    compteur = compteur + 1
# Tour numéro 0
# Tour numéro 1
# Tour numéro 2

La boucle infinie. Si la condition d'un while ne devient jamais fausse, la boucle tourne à l'infini et bloque le programme. Ici, oublier la ligne compteur = compteur + 1 ferait tourner le code pour toujours. Vérifiez toujours que quelque chose fait évoluer la condition vers la sortie.

Deux mots-clés pilotent le déroulement d'une boucle (for comme while) :

  • break : sort immédiatement de la boucle
  • continue : saute le reste du tour et passe au suivant
for i in range(10):
    if i == 5:
        break        # on arrête tout dès qu'on atteint 5
    if i % 2 == 0:
        continue     # on saute les nombres pairs
    print(i)
# Affiche 1, puis 3
# (4 est sauté, et à 5 on sort)

Récap : tout assembler

Conditions et boucles se combinent en permanence. Voici un petit programme qui parcourt une liste de notes et compte les reçus :

notes = [15, 8, 12, 6, 18, 10]
recus = 0

for note in notes:
    if note >= 10:
        recus = recus + 1
        print(f"{note} : reçu")
    else:
        print(f"{note} : recalé")

print(f"Total reçus : {recus} sur {len(notes)}")

Vous tenez là les deux briques fondamentales de tout programme : décider (if) et répéter (for, while). Presque tout le reste s'appuie dessus.

if / elif / else — making a decision

So far, your code runs line by line, never deviating. A condition lets you run code only if something is true. The basic keyword is if:

age = 20

if age >= 18:
    print("You are an adult")

To handle several cases, chain with elif ("else if") and finish with else ("otherwise"):

grade = 14

if grade >= 16:
    print("Excellent")
elif grade >= 12:
    print("Good")
elif grade >= 10:
    print("Pass")
else:
    print("Fail")
# Prints: Good

Python tests each condition in order and stops as soon as one is true. The elif and else blocks are optional: an if can stand alone.

Indentation MAKES the block. Unlike other languages that use curly braces { }, Python delimits blocks with indentation: 4 spaces. Everything indented under the if belongs to the if. As soon as you return to the margin, you leave the block. The colon : at the end of the line announces the block that follows.

if age >= 18:
    print("This line is INSIDE the if")
    print("This one too (same indentation)")
print("This one is OUTSIDE, it always prints")

Comparing and combining

A condition relies on a comparison that evaluates to True or False. Here are the six operators:

  • == — equal to
  • != — not equal to
  • < — less than
  • > — greater than
  • <= — less than or equal
  • >= — greater than or equal

You combine several conditions with the boolean operators and, or and not (negation):

age = 25
subscribed = True

# and: BOTH must be true
if age >= 18 and subscribed:
    print("Access granted")

# or: AT LEAST ONE must be true
if age < 12 or age >= 65:
    print("Reduced fare")

# not: flips the value
if not subscribed:
    print("Consider subscribing")
# Prints: Access granted

Classic trap: = is not ==. A single = is an assignment ("store this value in the variable"), while a double == is a comparison ("are these equal?"). Writing if age = 18: raises a SyntaxError. In a condition, you always want ==.

The for loop — repeating

A loop repeats a block of code. The for loop walks through a sequence, one element at a time. The range(n) function generates the numbers from 0 to n - 1:

for i in range(5):
    print(i)
# Prints 0, 1, 2, 3, 4 (not 5!)

You can also iterate directly over a list, without dealing with indices:

fruits = ["apple", "banana", "cherry"]

for fruit in fruits:
    print(f"I like {fruit}")
# I like apple
# I like banana
# I like cherry

If you need the index and the element at the same time, enumerate() does both:

for i, fruit in enumerate(fruits):
    print(f"{i}: {fruit}")
# 0: apple
# 1: banana
# 2: cherry

while, break and continue

The while loop repeats as long as a condition stays true. Handy when you don't know in advance how many iterations you'll need:

counter = 0

while counter < 3:
    print(f"Iteration {counter}")
    counter = counter + 1
# Iteration 0
# Iteration 1
# Iteration 2

The infinite loop. If a while condition never becomes false, the loop runs forever and freezes the program. Here, forgetting the line counter = counter + 1 would run the code forever. Always make sure something moves the condition toward the exit.

Two keywords steer the flow of a loop (both for and while):

  • breakexits the loop immediately
  • continueskips the rest of the current iteration and moves to the next
for i in range(10):
    if i == 5:
        break        # stop everything once we reach 5
    if i % 2 == 0:
        continue     # skip even numbers
    print(i)
# Prints 1, then 3
# (4 is skipped, and at 5 we exit)

Recap — putting it together

Conditions and loops combine constantly. Here is a small program that walks through a list of grades and counts the passes:

grades = [15, 8, 12, 6, 18, 10]
passed = 0

for grade in grades:
    if grade >= 10:
        passed = passed + 1
        print(f"{grade}: pass")
    else:
        print(f"{grade}: fail")

print(f"Total passed: {passed} out of {len(grades)}")

You now hold the two fundamental building blocks of any program: deciding (if) and repeating (for, while). Almost everything else builds on top of them.

Avec l'IA

Copiez ce prompt dans Claude ou ChatGPT :

Écris un programme Python qui parcourt les nombres de 1 à 100 et affiche « Fizz » pour les multiples de 3, « Buzz » pour les multiples de 5, « FizzBuzz » pour les multiples des deux, et le nombre sinon. Utilise une boucle for et des conditions if/elif/else.
Ré-explique sans regarder

Sans relire le code de l'IA : pour le FizzBuzz, pourquoi faut-il tester le cas « multiple de 3 ET de 5 » AVANT les cas « multiple de 3 » et « multiple de 5 » dans la chaîne if/elif ?

Une bonne explication dit : Python teste les conditions DANS L'ORDRE et s'arrête à la première vraie. Si on plaçait elif nombre % 3 == 0 en premier, un multiple de 15 (donc de 3 et de 5) afficherait « Fizz » et n'atteindrait jamais le cas « FizzBuzz ». Le cas le plus spécifique (nombre % 3 == 0 and nombre % 5 == 0) doit donc venir en tête de la chaîne.
Accepter ou rejeter le code de l'IA

Tu as demandé à l'IA une boucle qui compte à rebours de 5 à 1. Ton rôle de relecteur : l'accepter telle quelle ou la rejeter, et dire pourquoi.

n = 5
while n > 0:
    print(n)
# affiche 5, 4, 3, 2, 1 ... censément
À rejeter : c'est une boucle infinie. Rien ne fait jamais baisser n à l'intérieur du while, donc la condition n > 0 reste vraie pour toujours et le programme se fige en affichant des 5 sans fin. Il manque une ligne qui fait évoluer la condition vers la sortie, par exemple n = n - 1 après le print. C'est le piège classique du while : toujours vérifier que quelque chose rapproche de la condition d'arrêt.
Rappel libre

Sans remonter dans la leçon : quels nombres parcourt range(5), et quelle est la différence entre break et continue ?

range(5) parcourt 0, 1, 2, 3, 4 : il commence à 0 et s'arrête AVANT 5 (cinq valeurs). break sort immédiatement de la boucle entière ; continue abandonne seulement le tour en cours et repart au tour suivant. Bref : break = je quitte la boucle, continue = je saute ce tour-là.
Quel opérateur teste l'égalité dans une condition ?
Combien de fois s'exécute la boucle for i in range(5): ?
Que fait break dans une boucle ?
Prochaine étape

Vous savez décider et répéter. Mais pour stocker plusieurs valeurs et les retrouver facilement, il faut les bonnes structures : on passe aux listes et aux dictionnaires.

Leçon 4 : Listes et dictionnaires →
Besoin d'un développeur pour votre projet ?

Réponse sous 24h · Sans engagement