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
- L'exercice suivant avec le tuteur, sans compte : il guide pas à pas, sans donner la réponse
- 16 autres exercices corrigés dans ce chapitre, et 20 à chercher avec le tuteur
- Le podcast et la vidéo du chapitre et la correction filmée du TD : 2 minutes sans compte
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.