Adloun

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

Faire l'exercice suivant avec le tuteur

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.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant avec le tuteur →