Un chiffre d'affaires impossible
Vous travaillez pour une société de livraison à Lyon. Le tableau de bord affiche un chiffre d'affaires négatif pour mardi.
Personne n'a rendu d'argent ce jour-là. Le problème vient des données : une case vide, un signe moins tapé par erreur, une ville écrite de trois façons.
Avant de calculer, on nettoie.
À la fin de cette leçon
Remarque
Je peux repérer et corriger les valeurs manquantes et fausses.
Mots-clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Valeur manquante | une case vide ou absente | |
| Valeur fausse | une valeur mal écrite ou impossible | -15,00 |
| Nettoyer | corriger ou écarter les mauvaises valeurs | |
| Écarter | laisser une ligne de côté, sans la supprimer de la source | |
| None | la valeur Python qui veut dire « rien » |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Repérer avant de corriger
Une valeur manquante est une case vide. Une valeur fausse existe, mais elle est mal écrite ou impossible.
Dans un export, on cherche surtout trois choses : les cases vides, les espaces en trop et les valeurs hors limites. Une livraison ne coûte jamais moins de zéro euro.
On commence par repérer et compter. On ne corrige qu'ensuite.
Signaler les lignes à problème
# Un export de livraisons, tel qu'il arrive.
livraisons = [
{"numero": 1, "ville": "Lyon", "montant": "18,40"},
{"numero": 2, "ville": " lyon ", "montant": "22,00"},
{"numero": 3, "ville": "Marseille", "montant": ""},
{"numero": 4, "ville": "Toulouse", "montant": "-15,00"},
{"numero": 5, "ville": "", "montant": "9,90"},
]
# On repère sans rien corriger : on affiche seulement les lignes à problème.
for ligne in livraisons:
if ligne["montant"] == "":
print("Montant manquant, ligne", ligne["numero"])
if ligne["ville"] == "":
print("Ville manquante, ligne", ligne["numero"])
if ligne["ville"] != ligne["ville"].strip():
print("Espaces en trop, ligne", ligne["numero"])
# Ajoutez un test qui signale un montant qui commence par "-".
Cinq lignes, cinq diagnostics
| Ligne | Ville | Montant | Problème |
|---|---|---|---|
| 1 | Lyon | 18,40 | aucun |
| 2 | « lyon » | 22,00 | espaces et minuscule |
| 3 | Marseille | (vide) | montant manquant |
| 4 | Toulouse | -15,00 | montant impossible |
| 5 | (vide) | 9,90 | ville manquante |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Une règle écrite corrige chaque cas
Chaque problème reçoit une règle, toujours la même.
strip() enlève les espaces au début et à la fin. title() met une majuscule à chaque mot. replace(",", ".") change la virgule française en point, car Python lit 12.5 et pas 12,5.
Une valeur qu'on ne peut pas réparer est écartée et comptée. Le nombre d'écarts va dans votre compte rendu.
Nettoyer des montants et une ville
brut = ["18,40", " 22,00 ", "", "-15,00", "9,90"]
propres = []
ecartes = 0
for texte in brut:
texte = texte.strip() # enlève les espaces au début et à la fin
if texte == "":
ecartes = ecartes + 1 # manquant : on l'écarte et on le compte
else:
montant = float(texte.replace(",", ".")) # Python veut un point
if montant < 0:
ecartes = ecartes + 1 # impossible pour une livraison
else:
propres.append(montant)
print("Montants propres :", propres)
print("Lignes écartées :", ecartes)
villes = ["Lyon", "saint-étienne", "MARSEILLE"]
for ville in villes:
print(ville.strip().title())
# Ajoutez " lyon " à la liste villes, puis exécutez.
Une erreur fréquente
Attention
Beaucoup pensent qu'une case vide vaut zéro. C'est faux. Un zéro dit « gratuit », une case vide dit « on ne sait pas ». Remplacer le vide par 0 fait baisser la moyenne sans raison. Écartez la ligne, ou gardez None.
À vous : lire un montant
L'équipe finance reçoit chaque soir l'export des livraisons. Écrivez la fonction qui lit un montant comme un vrai export français l'écrit. Des tests cachés vérifient votre réponse.