Écrire projection(table, colonnes) qui renvoie la table réduite aux…
Exercice de TD · niveau 2 · NSI (première), chapitre 6 — Traiter des données en tables · Sélectionner, projeter, agréger
É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.
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.