Niveau 03 — Structures de données
Objectif du niveau
À la fin de ce niveau, tu sais stocker et manipuler des collections de données : listes (ajouter, retirer, trier, découper), tuples, dictionnaires et sets. Tu sais parcourir chacune de ces structures avec for, choisir la bonne structure pour un problème donné, et — surtout — tu comprends la mutabilité : pourquoi modifier une liste passée à deux variables change « les deux », et comment copier proprement. C'est le niveau qui transforme tes programmes de « quelques variables » en programmes qui traitent de vraies quantités de données.
Prérequis
- Niveau 02 — conditions et boucles :
if/elif/else,while,for,range,break/continue. Les boucles sont utilisées dans TOUTES les leçons de ce niveau. - Niveau 01 — types de base, f-strings, conversions.
- Notions clés : savoir parcourir avec
for, savoir qu'une chaîne s'indexe ("abc"[0]), savoir lire un traceback.
Durée indicative et avertissement honnête
3 semaines à raison de 30–60 min par jour.
Avertissement franc : quatre leçons sur cinq sont de la mécanique qui s'apprend bien (méthodes de listes, syntaxe des dicts…). Mais la leçon 03-4 — mutabilité et références partagées — est LE point difficile de ce niveau, et l'un des trois concepts les plus mal compris de tout Python (avec le scope et self). b = a ne copie PAS une liste : les deux noms pointent vers le même objet, et modifier via b modifie « aussi » a. Tant que ce n'est pas compris, tu auras des bugs incompréhensibles pendant des mois. Prévois le double de temps sur cette leçon, fais TOUS ses exercices, et n'hésite pas à y revenir à J+7. Le dire maintenant t'évite de croire que « tu es nul » quand ça résiste : ça résiste pour tout le monde.
Leçons prévues
Chaque leçon suivra le template 17 sections (lessons/TEMPLATE_LECON.md).
| N° | Titre | Notions couvertes | Statut |
|---|---|---|---|
| 03-1 | Listes — stocker en ordre | Création, indexation (positive et négative), len, modification par index, append, insert, remove, pop, sort/sorted, in, IndexError | ✅ |
| 03-2 | Slicing et parcours de listes | Slices [start:stop:step], copie par slice [:], parcours avec for, enumerate, construire une liste en boucle, parcourir en modifiant (et pourquoi c'est piégé) | ✅ |
| 03-3 | Tuples et dictionnaires | Tuples (immuables, déballage), dicts : créer, lire (d[k] vs .get), ajouter/modifier/supprimer, keys/values/items, parcours, KeyError | ✅ |
| 03-4 | Mutabilité et références partagées ⚠️ le point difficile | Objets vs noms, b = a ne copie pas, is vs ==, mutation via un alias, copie superficielle (.copy(), list(...), slice), limites de la copie superficielle (listes imbriquées), id() pour vérifier | ✅ |
| 03-5 | Sets et choisir la bonne structure | Sets : unicité, in rapide, union/intersection/différence ; tableau de décision liste vs tuple vs dict vs set ; mini-études de cas (doublons, comptage, annuaire) | ✅ |
Pièges et erreurs emblématiques du niveau
b = apuisb.append(...)modifie « aussi »a— il n'y a qu'UNE liste, deux noms. L'erreur emblématique du niveau, source de bugs silencieux.IndexError: list index out of range— accéder àlst[len(lst)]ou boucler un cran trop loin ; cousin direct de l'off-by-one du niveau 02.lst.sort()renvoieNone— écrirelst = lst.sort()détruit la liste ; confusion entre méthodes qui modifient sur place et fonctions qui renvoient (sorted).- Modifier une liste pendant qu'on la parcourt — des éléments sont sautés sans erreur ; il faut parcourir une copie ou construire une nouvelle liste.
KeyErrorsur un dict — accéder à une clé absente avecd[k]au lieu ded.get(k)ou d'un testk in d.- Croire que
.copy()suffit toujours — la copie superficielle partage les sous-listes ; modifiercopie[0][0]modifie l'originale.
Mini-projets du niveau
Fiches détaillées dans /projects.
- Liste de courses interactive — menu en boucle : ajouter, retirer, afficher trié, compter (listes + validation de saisie).
- Compteur de mots — analyser une phrase et compter les occurrences de chaque mot dans un dict, afficher les plus fréquents.
- Annuaire simple — dict
nom → infos, recherche, ajout, suppression, détection de doublons avec un set.
Critères de sortie
- Je sais créer, indexer, découper (slice) et modifier une liste sans regarder la doc.
- Je sais quelles méthodes modifient la liste sur place (
sort,append…) et lesquelles renvoient une nouvelle valeur (sorted). - Je sais parcourir une liste avec
foretenumerate, et un dict avec.items(). - Je sais expliquer avec un dessin pourquoi
b = apuisb.append(4)« change aussi »a. - Je sais faire une copie superficielle et je sais dire dans quel cas elle ne suffit pas.
- Je sais utiliser
d.get(k)ouk in dpour éviter unKeyError. - Je sais éliminer les doublons d'une collection avec un set.
- Devant un problème donné, je sais choisir entre liste, tuple, dict et set — et justifier.
Commit de fin de niveau
git add lessons/level-03-structures-donnees
git commit -m "exercises: complete level 03 (data structures)"