Répondez à tout, puis cliquez sur Corriger : score et explications s'affichent.
2.1 · Rappel
1. Quelle structure choisir pour associer un code client à ses infos ?
Le dict est l'annuaire : accès par clé, .get() sans KeyError, parcours en .items().
2.1 · Application
2. Nabil écrit « copie = ventes » puis modifie « copie ». Que se passe-t-il ?
= partage, il ne copie pas : .copy() à plat, deepcopy() pour l'imbriqué.
2.1 · Arbitrage
3. Un collègue cherche chaque client en parcourant une liste de 50 000 lignes à chaque fois. Verdict de Nabil ?
Chercher par identifiant = dict indexé ; la liste reste pour l'ordre et le parcours.
2.2 · Rappel
4. Pourquoi préférer les f-strings à la concaténation avec + ?
f"Total : {total:.2f} €" : variable, calcul et format en une ligne lisible.
2.2 · Application
5. Nabil lit un export avec des accents cassés et un fichier parfois verrouillé. Que corrige-t-il ?
with ferme tout seul même en erreur ; encoding utf-8 garde les accents ; « w » écrase, il ne lit pas.
2.2 · Application
6. Le récap de Nabil doit survivre au redémarrage et rester échangeable. Quel format ?
JSON = listes et dicts persistants, lisibles par d'autres outils ; module csv pour les tableurs.
2.3 · Rappel
7. Que désigne « self » dans une méthode ?
self s'écrit dans la définition, jamais à l'appel : chaque objet garde son propre état.
2.3 · Application
8. Nabil crée VenteRemise(Vente) avec un taux et super().__init__(). Qu'a-t-il fait ?
Héritage pour est-un, peu profond ; composition (a-des) sinon.
2.3 · Arbitrage
9. Un collègue propose 6 niveaux d'héritage et des dicts + fonctions globales « pour aller vite ». Verdict ?
Données + comportements en classe, héritage mesuré, __str__/__eq__ et @dataclass si adapté.
2.4 · Application
10. Nabil convertit une saisie avec float(). Comment la fiabiliser ?
Risqué précis encadré, type ciblé, traitement réel — jamais de except nu.
2.4 · Application
11. Un montant négatif arrive dans Vente(...). Où le refuser ?
raise signale l'invariant violé à la source ; finally nettoie, else continue si OK.
2.4 · Arbitrage
12. Un collègue veut un « except: pass » général pour « ne plus voir d'erreurs ». Verdict de Nabil ?
Silencer enterre les bugs vivants : on n'attrape que ce qu'on sait traiter.
Et après ?
Score ≥ 80 % : passez au Niveau 3 — modules, pip/venv et fonctions avancées, sur vos bases solides en données et objets.
Score 60-79 % : reprenez les sections ratées (2.1 conteneurs/copies, 2.2 f-strings/with/JSON, 2.3 classes/héritage/dunders, 2.4 try ciblés/raise) et refaites les défis 48h.
Score < 60 % : reconstruisez le chantier de Nabil pas à pas (ventes en liste de dicts, rapport en f-strings + JSON, classes Vente, import fiabilisé), puis repassez le test.
Dans tous les cas : gardez les réflexes — bon conteneur au bon usage, f-strings + with/encoding, objets citoyens, excepts ciblés sans silence.