Adloun

Deux élèves peuvent porter le même nom sans que ce soit une erreur

Exercice de TD · niveau 3 (difficile) · NSI (première), chapitre 6 — Traiter des données en tables · Doublons, cohérence, domaines

Énoncé

Deux élèves peuvent porter le même nom sans que ce soit une erreur. Écrire doublons_composite(table, colonnes), qui cherche les doublons sur une combinaison de colonnes, et montrer sur un exemple que le résultat n'est pas celui de doublons colonne par colonne.

Corrigé

Une clé composite est un p-uplet (chapitre 4) : c'est ce qui permet de s'en servir comme clé de dictionnaire, un tableau ne le pourrait pas.


def doublons_composite(table, colonnes):
    """Combinaisons de valeurs qui apparaissent plus d'une fois.

    Précondition : toutes les colonnes existent dans chaque ligne, et
                   leurs valeurs sont hachables (nombres, chaînes...).
    """
    effectifs = {}
    for ligne in table:
        c = tuple(ligne[k] for k in colonnes)
        effectifs[c] = effectifs.get(c, 0) + 1
    return [c for c, n in effectifs.items() if n > 1]

Sur la table de quatre lignes : Nour en 1G3, Nour en 1G1, Yanis en 1G3 (deux fois),

CléDoublons trouvés
`nom``['Nour', 'Yanis']`
`(nom, classe)``[('Yanis', '1G3')]`
`(nom, classe, moyenne)``[('Yanis', '1G3', 9.5)]`

Ce que la comparaison enseigne. Sur la seule colonne nom, Nour est signalée — alors que ce sont deux personnes différentes, dans deux classes différentes : c'est un faux positif. Ajouter la classe le fait disparaître. Il ne reste que Yanis, dupliqué à l'identique : là, c'est un vrai doublon.

La leçon. Un doublon n'existe pas dans l'absolu : il existe par rapport à une clé. Choisir la clé, c'est décider ce qu'« être la même ligne » veut dire — et c'est une décision de conception, pas de programmation.

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.