Fusionner eleves et classes, puis afficher pour chaque élève sa salle
Exercice de TD · niveau 2 · NSI (première), chapitre 6 — Traiter des données en tables · Trier et fusionner
Énoncé
Fusionner eleves et classes, puis afficher pour chaque élève sa salle. Modifier ensuite une classe en "1g3" dans le fichier des élèves : combien de lignes le résultat perd-il ? Le contrôle de la fin de section l'avait-il signalé ?
Corrigé
complete = fusion(eleves, classes, "classe")
for l in complete:
print(l["nom"], l["salle"])
# Nour 305 / Camille 204 / Yanis 305 / Sofia 112 / Adam 204
Cinq élèves, cinq lignes : la fusion n'a rien perdu.
Après l'altération. On remplace la classe de Nour par "1g3" — un simple minuscule. La fusion rend alors quatre lignes : une ligne est perdue, et le programme n'a émis ni erreur ni avertissement. Le contrôle de fin de section, lui, l'aurait dit :
complete = fusion(abimee, classes, "classe")
if len(complete) < len(abimee):
print("Attention :", len(abimee) - len(complete), "ligne(s) sans correspondance")
# Attention : 1 ligne(s) sans correspondance
Et le contrôle de domaine l'aurait dit plus tôt encore : hors_domaine(abimee, "classe", lambda x: x in CLASSES_CONNUES) rend une ligne — celle de Nour — avant même que la fusion ait lieu.
Deux filets, deux moments. Le domaine attrape le défaut à l'import ; le décompte de la fusion l'attrape à l'usage. Le premier dit quelle ligne est fautive et pourquoi ; le second dit seulement combien. Il faut les deux, et dans cet ordre.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.