Chapitre 2 : Critères, doublons, cohérence
Rechercher dans une table
Une table de quelques milliers de lignes ne se lit pas : elle s'interroge. Chercher, c'est parcourir les lignes et ne garder que celles qui vérifient un critère. Dans ce chapitre, tu apprends à exprimer des critères avec la logique (and, or, not), à chercher une ligne précise, à repérer les doublons et à tester la cohérence des données.
Au programme de NSI : Traitement de données en tables : Recherche dans une table. Rechercher les lignes d'une table vérifiant des critères exprimés en logique propositionnelle. Rechercher des doublons, tester la cohérence d'une table.
Garder les lignes qui vérifient un critère
Le schéma est toujours le même : on part d'un tableau vide, on parcourt la table, et on ajoute à ce tableau chaque ligne qui vérifie la condition d'un if.
import csv
with open('visiteurs.csv', encoding='utf-8') as f:
table = list(csv.DictReader(f))
brestois = []
for ligne in table:
if ligne['ville'] == 'Brest':
brestois.append(ligne['nom'])
print(brestois)Avec une compréhension, la même recherche tient en une ligne : brestois = [l['nom'] for l in table if l['ville'] == 'Brest'].
Des critères composés : et, ou, non
Un critère se construit avec des opérateurs de comparaison (==, !=, <, <=, >, >=) et des connecteurs logiques. Avec des parenthèses, on évite les ambiguïtés.
| Connecteur | Python | Vrai quand |
|---|---|---|
| et | A and B | A et B sont vraies toutes les deux |
| ou | A or B | au moins une des deux est vraie |
| non | not A | A est fausse |
cibles = []
for ligne in table:
mineur = int(ligne['age']) < 18
tot = ligne['entree'] < '10:00'
if mineur or tot:
cibles.append(ligne['nom'])Chercher une seule ligne
Pour retrouver une ligne, on parcourt la table et on s'arrête dès qu'on l'a trouvée. Dans une fonction, return interrompt tout de suite le parcours. Si on arrive à la fin sans rien trouver, on renvoie None (« rien »).
def chercher(table, nom):
for ligne in table:
if ligne['nom'] == nom:
return ligne
return None
print(chercher(table, 'Petit'))
print(chercher(table, 'Inconnu'))Doublons et cohérence
Un fichier saisi à la main contient souvent des erreurs : une ligne en double, un âge impossible, une heure qui n'existe pas. Avant d'exploiter une table, on teste sa cohérence. Pour repérer un doublon, on mémorise ce qu'on a déjà vu.
nom,prenom,age,ville,entree
Durand,Armand,45,Brest,09:15
Martin,Julie,17,Quimper,09:40
Bernard,Karim,290,Brest,10:05
Petit,Sofia,34,Rennes,10:20
Martin,Julie,17,Quimper,09:40
Richard,Emma,52,Nantes,25:00
Moreau,Hugo,23,Quimper,11:10
Simon,Lina,-4,Rennes,11:25
Laurent,Noah,19,Brest,11:50
Lefebvre,Jade,38,Nantes,12:05
invalides = []
for ligne in table:
age = int(ligne['age'])
if age < 0 or age > 120:
invalides.append(ligne['nom'])À toi de jouer : Exercice guidé
Complète la condition pour que brestois contienne les noms des visiteurs dont la ville est 'Brest', dans l'ordre du fichier.