Les Boucles

Repeter des actions sans copier-coller

🔄 Pourquoi les boucles ?

Imagine devoir afficher les nombres de 1 a 100. Sans boucle :

print(1)
print(2)
print(3)
... 97 lignes plus tard ...
print(100)

Avec une boucle :

for i in range(1, 101):
    print(i)

2 lignes au lieu de 100. C'est ca la puissance des boucles !

🎯 Les deux types de boucles

🔁
WHILE
Tant que...
Nombre inconnu de repetitions
🔢
FOR
Pour chaque...
Nombre connu de repetitions

🎮 Visualiseur de boucle

Iteration actuelle (i)
0
Clique sur "Etape suivante" pour voir la boucle en action

🔁 La boucle WHILE

Repete TANT QUE la condition est vraie

Condition vraie ?
OUI
Executer le bloc
Retour a la condition
NON
Sortir de la boucle
compteur = 0

while compteur < 5:
    print(f"Tour {compteur}")
    compteur += 1  # IMPORTANT: incrementer !

# Affiche: Tour 0, Tour 1, Tour 2, Tour 3, Tour 4
let compteur = 0;

while (compteur < 5) {
    console.log(`Tour ${compteur}`);
    compteur++;  // IMPORTANT: incrementer !
}

// Affiche: Tour 0, Tour 1, Tour 2, Tour 3, Tour 4
int compteur = 0;

while (compteur < 5) {
    System.out.println("Tour " + compteur);
    compteur++;  // IMPORTANT: incrementer !
}

// Affiche: Tour 0, Tour 1, Tour 2, Tour 3, Tour 4
int compteur = 0;

while (compteur < 5) {
    Console.WriteLine($"Tour {compteur}");
    compteur++;  // IMPORTANT: incrementer !
}

// Affiche: Tour 0, Tour 1, Tour 2, Tour 3, Tour 4
int compteur = 0;

while (compteur < 5) {
    std::cout << "Tour " << compteur << std::endl;
    compteur++;  // IMPORTANT: incrementer !
}

// Affiche: Tour 0, Tour 1, Tour 2, Tour 3, Tour 4
compteur <- 0

while (compteur < 5) {
    print(paste("Tour", compteur))
    compteur <- compteur + 1  # IMPORTANT!
}

# Mais en R, prefere les fonctions vectorisees !
print(paste("Tour", 0:4))  # Plus elegant

Danger : Si tu oublies d'incrementer, la condition reste vraie → boucle infinie !

🔢 La boucle FOR

Repete un nombre defini de fois

# Python : range(debut, fin)
for i in range(5):
    print(f"Tour {i}")

# i va de 0 a 4 (5 non inclus)
// JS : for (init; condition; increment)
for (let i = 0; i < 5; i++) {
    console.log(`Tour ${i}`);
}

// i va de 0 a 4
// Java : for (init; condition; increment)
for (int i = 0; i < 5; i++) {
    System.out.println("Tour " + i);
}

// i va de 0 a 4
// C# : for (init; condition; increment)
for (int i = 0; i < 5; i++) {
    Console.WriteLine($"Tour {i}");
}

// i va de 0 a 4
// C++ : for (init; condition; increment)
for (int i = 0; i < 5; i++) {
    std::cout << "Tour " << i << std::endl;
}

// i va de 0 a 4
# R : for (var in sequence)
for (i in 0:4) {
    print(paste("Tour", i))
}

# Mais encore mieux : vectorise !
paste("Tour", 0:4)  # Pas de boucle

Structure classique :
for (initialisation; condition; incrementation)

📦 Parcourir une collection

Iterer sur chaque element d'une liste/tableau

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

for fruit in fruits:
    print(f"J'aime les {fruit}s")

# Avec index : enumerate()
for i, fruit in enumerate(fruits):
    print(f"{i}: {fruit}")
const fruits = ["pomme", "banane", "orange"];

// for...of (valeurs)
for (const fruit of fruits) {
    console.log(`J'aime les ${fruit}s`);
}

// forEach avec index
fruits.forEach((fruit, i) => {
    console.log(`${i}: ${fruit}`);
});
String[] fruits = {"pomme", "banane", "orange"};

// Enhanced for (for-each)
for (String fruit : fruits) {
    System.out.println("J'aime les " + fruit + "s");
}

// Avec index : boucle classique
for (int i = 0; i < fruits.length; i++) {
    System.out.println(i + ": " + fruits[i]);
}
string[] fruits = {"pomme", "banane", "orange"};

// foreach
foreach (string fruit in fruits) {
    Console.WriteLine($"J'aime les {fruit}s");
}

// Avec index
for (int i = 0; i < fruits.Length; i++) {
    Console.WriteLine($"{i}: {fruits[i]}");
}
std::vector<std::string> fruits = {"pomme", "banane", "orange"};

// Range-based for (C++11)
for (const auto& fruit : fruits) {
    std::cout << "J'aime les " << fruit << "s" << std::endl;
}

// Avec index
for (size_t i = 0; i < fruits.size(); i++) {
    std::cout << i << ": " << fruits[i] << std::endl;
}
fruits <- c("pomme", "banane", "orange")

# Boucle classique
for (fruit in fruits) {
    print(paste("J'aime les", fruit))
}

# Mais R est vectorise ! Mieux :
paste("J'aime les", fruits)  # Tout d'un coup

# Avec sapply/lapply (fonctionnel)
sapply(fruits, toupper)  # Applique a chaque

🛑 Break & Continue - Interactif

🛑
break
Sort immediatement
⏭️
continue
Saute l'iteration
Cherche le nombre 5 dans la liste
Console :
// Clique sur Etape pour commencer
Mode: break
# Chercher un element (break)
nombres = [2, 7, 3, 5, 9, 1, 8]
for n in nombres:
    if n == 5:
        print("Trouve !")
        break  # Arrete des que trouve
    print(f"Verifie {n}...")

# Filtrer les pairs (continue)
for n in range(10):
    if n % 2 == 0:
        continue  # Saute les pairs
    print(n)  # Affiche: 1, 3, 5, 7, 9
// Chercher un element (break)
const nombres = [2, 7, 3, 5, 9, 1, 8];
for (const n of nombres) {
    if (n === 5) {
        console.log("Trouve !");
        break;  // Arrete des que trouve
    }
    console.log(`Verifie ${n}...`);
}

// Filtrer les pairs (continue)
for (let n = 0; n < 10; n++) {
    if (n % 2 === 0) continue;
    console.log(n);  // 1, 3, 5, 7, 9
}

🎯 Exemples concrets avec resultats

📊 Calculer la somme de 1 a N

N = 5
total = 1 + 2 + 3 + 4 + 5 = 15
Voir le code
# Python
total = 0
for i in range(1, n + 1):
    total += i
    print(f"Ajoute {i} → total = {total}")

print(f"Somme = {total}")
# Somme = 15

⏰ Compte a rebours

10
Pret au decollage !
Voir le code
# Python - Compte a rebours
for i in range(10, 0, -1):  # 10, 9, 8... 1
    print(i)
    time.sleep(1)  # Attendre 1 seconde

print("DECOLLAGE ! 🚀")

# Resultat:
# 10
# 9
# ...
# 1
# DECOLLAGE ! 🚀

🎵 Filtrer une playlist (continue)

Afficher seulement les chansons de plus de 3 min :
Resultat :
// Clique pour voir le resultat
Voir le code
# Python - Filtrer avec continue
playlist = [
    {"titre": "Intro", "duree": 45},
    {"titre": "Summer Hit", "duree": 210},
    {"titre": "Interlude", "duree": 90},
    {"titre": "Epic Song", "duree": 245},
]

for song in playlist:
    if song["duree"] < 180:  # Moins de 3 min
        continue  # Saute cette chanson
    print(song["titre"])

# Resultat:
# Summer Hit
# Epic Song

🔍 Trouver le premier multiple (break)

Premier multiple de superieur a 100
Trouve : 105
Voir le code
# Python - Chercher avec break
n = 7  # Le nombre dont on cherche un multiple

for i in range(101, 200):
    if i % n == 0:  # Si i est divisible par n
        print(f"Premier multiple de {n} > 100 : {i}")
        break  # Arrete des qu'on trouve !

# Resultat:
# Premier multiple de 7 > 100 : 105

# Sans break, on continuerait jusqu'a 199...
# Avec break, on s'arrete des que c'est trouve !

🔲 Boucles imbriquees

Une boucle dans une boucle (pour les grilles, matrices...)

# Dessiner un rectangle de *
for ligne in range(3):       # 3 lignes
    for col in range(5):     # 5 colonnes
        print("*", end="")
    print()  # Nouvelle ligne

# Resultat:
# *****
# *****
# *****
// Dessiner un rectangle de *
for (let ligne = 0; ligne < 3; ligne++) {
    let row = "";
    for (let col = 0; col < 5; col++) {
        row += "*";
    }
    console.log(row);
}

// Resultat:
// *****
// *****
// *****
// Dessiner un rectangle de *
for (int ligne = 0; ligne < 3; ligne++) {
    for (int col = 0; col < 5; col++) {
        System.out.print("*");
    }
    System.out.println();
}

// Resultat:
// *****
// *****
// *****

Complexite : 3 lignes x 5 colonnes = 15 iterations au total

🎮 Exemple pratique : Jeu de devinette

import random

secret = random.randint(1, 100)
essais = 0

while True:
    guess = int(input("Ton nombre : "))
    essais += 1

    if guess < secret:
        print("Plus grand !")
    elif guess > secret:
        print("Plus petit !")
    else:
        print(f"Bravo ! Trouve en {essais} essais")
        break  # Sortir de la boucle
const secret = Math.floor(Math.random() * 100) + 1;
let essais = 0;

while (true) {
    const guess = parseInt(prompt("Ton nombre :"));
    essais++;

    if (guess < secret) {
        alert("Plus grand !");
    } else if (guess > secret) {
        alert("Plus petit !");
    } else {
        alert(`Bravo ! Trouve en ${essais} essais`);
        break;  // Sortir de la boucle
    }
}

🚫 Erreurs courantes

Boucle infinie
while (x < 10) { print(x); } - x ne change jamais !
Off-by-one
for i in range(1, 10) - Va de 1 a 9, pas 10 !
Modifier la liste en iterant
for item in list: list.remove(item) - Comportement imprevisible !

📋 Recapitulatif

while
Repete tant que condition vraie
for
Repete N fois ou sur collection
break
Sort de la boucle
continue
Passe a l'iteration suivante
🎯

Quiz Mode Survie

1 erreur = Game Over
🔄

Les Boucles

10 questions aleatoires - Mode Survie

🎬

Pour aller plus loin

Les excellentes vidéos de Graven sur les boucles :

Java Boucles
Apprendre le Java #5 - Les Boucles
Graven • ☕ Java
Python Boucles
Apprendre le Python #5 - Les Boucles
Graven • 🐍 Python
Glisser pour continuer vers Prog 5 : Les Fonctions
Débutant