Adloun

NSI (première) · Chapitre 6 · Exercice de TD

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

Traiter des données en tables · Doublons, cohérence, domaines · niveau 3 (difficile)

É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.

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 →