NSI (première) · Chapitre 6 · Exercice de TD
Écrire projection(table, colonnes) qui renvoie la table réduite aux…
Traiter des données en tables · Sélectionner, projeter, agréger · niveau 2
Énoncé
Écrire projection(table, colonnes) qui renvoie la table réduite aux colonnes indiquées. Quelle précondition ?
Corrigé
La précondition. Chaque colonne demandée doit exister dans chaque ligne. Sans elle, l'accès ligne[c] lève une KeyError au milieu du parcours, après avoir déjà construit une partie du résultat.
def projection(table, colonnes):
"""Table réduite aux colonnes indiquées, dans l'ordre donné.
Précondition : chaque colonne demandée figure dans chaque ligne.
Postcondition : le résultat a autant de lignes que la table, et
chaque ligne a exactement len(colonnes) descripteurs.
"""
assert all(all(c in l for c in colonnes) for l in table), "colonne absente"
return [{c: ligne[c] for c in colonnes} for ligne in table]
Contrôle. projection(eleves, ["nom", "moyenne"]) rend [{'nom': 'Nour', 'moyenne': 15.5}, {'nom': 'Camille', 'moyenne': 12.0}, ...] : cinq lignes, deux descripteurs chacune.
Ce que la projection ne fait pas. Elle ne supprime pas les doublons. Projeter eleves sur la seule colonne classe donne cinq lignes, dont deux paires identiques — alors qu'il n'y a que trois classes. C'est une différence avec la projection du modèle relationnel de la terminale, qui, elle, dédoublonne.
Piège : écrire ligne.pop(c) pour retirer les colonnes non voulues. Cela modifierait la table d'origine sur place. Une projection construit une table neuve.
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.