NSI (première) · Chapitre 6 · Exercice de TD
Fusionner eleves et classes, puis afficher pour chaque élève sa salle
Traiter des données en tables · Trier et fusionner · niveau 2
É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.
100 % gratuit
Essaie le suivant avec le tuteur
- L'exercice suivant avec le tuteur, sans compte : il guide pas à pas, sans donner la réponse
- 16 autres exercices corrigés dans ce chapitre, et 20 à chercher avec le tuteur
- Le podcast et la vidéo du chapitre et la correction filmée du TD : 2 minutes sans compte
Sans compte : le cours, 2 minutes de podcast et de vidéo et un exercice avec le tuteur. Pour tout le reste : inscription gratuite en 30 secondes, sans carte bancaire.