10. Les boucles avancées en Python
Approfondissez les boucles Python : boucles imbriquées, contrôle de flux avec break/continue, et techniques d'optimisation.
PYTHON pour les DÉBUTANTS #10#
Les boucles avancées en Python#
Maintenant que vous maîtrisez les bases des boucles, découvrons les techniques avancées qui vous permettront d’écrire du code plus efficace et élégant.
Boucles imbriquées#
Les boucles imbriquées permettent de traiter des structures de données complexes.
Exemple de base#
# Table de multiplication
for i in range(1, 4):
for j in range(1, 4):
print(f"{i} x {j} = {i * j}")
print() # Ligne vide entre les tablespythonTraitement de matrices#
# Matrice 3x3
matrice = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# Parcourir la matrice
for ligne in range(len(matrice)):
for colonne in range(len(matrice[ligne])):
print(f"Position [{ligne}][{colonne}] = {matrice[ligne][colonne]}")pythonRecherche dans une liste de listes#
# Liste d'étudiants avec leurs notes
etudiants = [
["Alice", [15, 18, 12]],
["Bob", [14, 16, 19]],
["Charlie", [17, 13, 16]]
]
# Calculer la moyenne de chaque étudiant
for nom, notes in etudiants:
moyenne = sum(notes) / len(notes)
print(f"{nom}: {moyenne:.2f}")pythonContrôle de flux avec break et continue#
L’instruction break#
break permet de sortir complètement d’une boucle.
# Recherche d'un élément dans une liste
nombres = [1, 3, 5, 7, 9, 11, 13, 15]
recherche = 7
trouve = False
for nombre in nombres:
if nombre == recherche:
trouve = True
print(f"Trouvé ! {recherche} est dans la liste")
break
print(f"Vérification de {nombre}...")
if not trouve:
print(f"{recherche} n'est pas dans la liste")pythonL’instruction continue#
continue permet de passer à l’itération suivante sans exécuter le reste du code.
# Afficher seulement les nombres pairs
nombres = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for nombre in nombres:
if nombre % 2 != 0: # Si impair
continue # Passer au suivant
print(f"{nombre} est pair")pythonExemple combiné#
# Traitement de données avec conditions
donnees = [10, -5, 0, 15, -3, 20, 0, -8]
for valeur in donnees:
if valeur == 0:
print("Valeur nulle ignorée")
continue
if valeur < 0:
print(f"Valeur négative trouvée: {valeur}")
break
print(f"Traitement de: {valeur}")pythonBoucles avec else#
En Python, les boucles peuvent avoir une clause else qui s’exécute si la boucle se termine normalement (sans break).
Exemple avec recherche#
# Recherche avec else
nombres = [1, 3, 5, 7, 9]
recherche = 4
for nombre in nombres:
if nombre == recherche:
print(f"Trouvé ! {recherche}")
break
else:
print(f"{recherche} n'a pas été trouvé dans la liste")pythonVérification de primalité#
# Vérifier si un nombre est premier
def est_premier(n):
if n < 2:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
# Test de primalité
nombre = 17
if est_premier(nombre):
print(f"{nombre} est premier")
else:
print(f"{nombre} n'est pas premier")pythonCompréhensions de listes avancées#
Compréhensions imbriquées#
# Matrice de multiplication
table = [[i * j for j in range(1, 4)] for i in range(1, 4)]
print(table)
# [[1, 2, 3], [2, 4, 6], [3, 6, 9]]
# Aplatir une liste de listes
matrice = [[1, 2], [3, 4], [5, 6]]
aplatie = [element for ligne in matrice for element in ligne]
print(aplatie) # [1, 2, 3, 4, 5, 6]pythonCompréhensions avec conditions#
# Nombres pairs au carré
nombres = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
carres_pairs = [x**2 for x in nombres if x % 2 == 0]
print(carres_pairs) # [4, 16, 36, 64, 100]
# Mots de plus de 3 caractères en majuscules
mots = ["chat", "chien", "poisson", "oiseau", "lapin"]
mots_longs = [mot.upper() for mot in mots if len(mot) > 3]
print(mots_longs) # ['CHIEN', 'POISSON', 'OISEAU', 'LAPIN']pythonFonctions avec enumerate et zip#
enumerate() - Parcourir avec index#
# Parcourir une liste avec l'index
fruits = ["pomme", "banane", "orange"]
for index, fruit in enumerate(fruits):
print(f"{index + 1}. {fruit}")
# enumerate avec start
for index, fruit in enumerate(fruits, start=1):
print(f"{index}. {fruit}")pythonzip() - Parcourir plusieurs listes#
# Parcourir plusieurs listes simultanément
noms = ["Alice", "Bob", "Charlie"]
ages = [25, 30, 35]
villes = ["Paris", "Lyon", "Marseille"]
for nom, age, ville in zip(noms, ages, villes):
print(f"{nom}, {age} ans, habite à {ville}")
# Créer un dictionnaire avec zip
personnes = dict(zip(noms, zip(ages, villes)))
print(personnes)pythonOptimisation des boucles#
Éviter les recalculs#
# ❌ Inefficace - recalcul à chaque itération
nombres = [1, 2, 3, 4, 5]
for i in range(len(nombres)):
if len(nombres) > 3: # Recalculé à chaque fois
print(nombres[i])
# ✅ Efficace - calcul une seule fois
nombres = [1, 2, 3, 4, 5]
longueur = len(nombres)
if longueur > 3:
for i in range(longueur):
print(nombres[i])pythonUtiliser les méthodes intégrées#
# ❌ Boucle manuelle
nombres = [1, 2, 3, 4, 5]
total = 0
for nombre in nombres:
total += nombre
# ✅ Méthode intégrée
nombres = [1, 2, 3, 4, 5]
total = sum(nombres)pythonBoucles avec générateurs#
Générateurs simples#
# Générateur de nombres pairs
def nombres_pairs(maximum):
for i in range(0, maximum, 2):
yield i
# Utilisation
for nombre in nombres_pairs(10):
print(nombre) # 0, 2, 4, 6, 8pythonGénérateurs avec conditions#
# Générateur de nombres premiers
def nombres_premiers(maximum):
for nombre in range(2, maximum):
if est_premier(nombre):
yield nombre
# Utilisation
for premier in nombres_premiers(20):
print(premier) # 2, 3, 5, 7, 11, 13, 17, 19pythonCas d’usage pratiques#
Traitement de fichiers#
# Lire un fichier ligne par ligne
def lire_fichier(nom_fichier):
try:
with open(nom_fichier, 'r', encoding='utf-8') as fichier:
for numero_ligne, ligne in enumerate(fichier, start=1):
ligne = ligne.strip()
if ligne: # Ignorer les lignes vides
print(f"Ligne {numero_ligne}: {ligne}")
except FileNotFoundError:
print(f"Le fichier {nom_fichier} n'existe pas")pythonSimulation de jeu#
# Simulation de lancers de dés
import random
def simuler_des(nb_lancers):
resultats = []
for _ in range(nb_lancers):
de1 = random.randint(1, 6)
de2 = random.randint(1, 6)
resultats.append((de1, de2, de1 + de2))
return resultats
# Simulation
lancers = simuler_des(10)
for i, (de1, de2, total) in enumerate(lancers, start=1):
print(f"Lancer {i}: {de1} + {de2} = {total}")pythonExercices pratiques#
-
Table de multiplication : Créez une table de multiplication complète avec des boucles imbriquées.
-
Recherche dans une matrice : Trouvez un élément dans une matrice et affichez sa position.
-
Analyse de données : Traitez une liste de notes et calculez les statistiques.
-
Générateur de mots de passe : Créez un générateur de mots de passe aléatoires.
Conclusion#
Les boucles avancées en Python offrent une grande flexibilité :
- Boucles imbriquées : Pour traiter des structures complexes
- Contrôle de flux :
breaketcontinuepour une logique fine - Clause else : Pour des cas de sortie normale
- Compréhensions : Pour un code plus concis et lisible
- Fonctions intégrées :
enumerate()etzip()pour plus d’efficacité - Générateurs : Pour une utilisation mémoire optimisée
Maîtrisez ces techniques et vous écrirez des boucles Python plus efficaces et élégantes ! 🐍✨