Repeter des actions sans copier-coller
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 !
Repete TANT QUE la condition est vraie
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 !
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)
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
# 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 }
# Python total = 0 for i in range(1, n + 1): total += i print(f"Ajoute {i} → total = {total}") print(f"Somme = {total}") # Somme = 15
# 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 ! 🚀
# 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
# 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 !
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
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 } }
while (x < 10) { print(x); }
- x ne change jamais !
for i in range(1, 10)
- Va de 1 a 9, pas 10 !
for item in list: list.remove(item)
- Comportement imprevisible !
10 questions aleatoires - Mode Survie
Les excellentes vidéos de Graven sur les boucles :