Adloun

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

Un tableur français a exporté la colonne moyenne avec des virgules…

Traiter des données en tables · Doublons, cohérence, domaines · niveau 2

Énoncé

Un tableur français a exporté la colonne moyenne avec des virgules décimales, et une valeur y est écrite "inconnue". Que fait float ? Écrire une conversion qui accepte la virgule et met de côté les lignes irrécupérables plutôt que de tout interrompre.

Corrigé

Ce que fait float. Il refuse la virgule :


ValueError: could not convert string to float: '15,5'

Et le convertir du cours propage l'erreur : la conversion s'arrête en cours de route, laissant la table à moitié convertie. C'est le pire état possible.


def vers_float(s):
    """Flottant lu depuis une écriture française : virgule décimale,
    espaces éventuels autour."""
    return float(s.replace(",", ".").strip())

def convertir_tolerant(table, colonne, fonction):
    """Sépare les lignes converties des lignes irrécupérables.

    Postcondition : len(bonnes) + len(rejetees) == len(table), et la
                    table d'origine n'est pas modifiée.
    """
    bonnes, rejetees = [], []
    for ligne in table:
        try:
            neuve = dict(ligne)
            neuve[colonne] = fonction(ligne[colonne])
            bonnes.append(neuve)
        except (ValueError, TypeError):
            rejetees.append(ligne)
    return bonnes, rejetees

Contrôle. Sur la colonne ['15,5', '12,0', 'inconnue', '17,25'], on obtient [15.5, 12.0, 17.25] de converties et une seule rejetée, celle de Yanis.

La règle. Rejeter n'est acceptable que si on le dit. Un import qui écarte silencieusement des lignes est un mensonge par omission : le décompte des lignes rejetées fait partie du résultat, comme le demande la piste de projet du chapitre.

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 →