Adloun

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

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 →