Dans quelle salle est Léa ?
Le lycée a une liste d’élèves. Elle dit : « Léa est en 2A. »
Mais la salle de la 2A n’est pas dans cette liste. Elle est dans une autre table, celle des classes.
Pour répondre, il faut relier les deux tables. C’est le sujet de cette leçon.
Mots-clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Identifiant | Un code qui nomme une ligne sans se tromper. | 2A |
| Clé commune | Une colonne qui existe dans les deux tables et permet de les relier. | id_classe |
| Jointure | Relier les lignes de deux tables grâce à la clé commune. | Léa et la ligne de la 2A |
| Doublon | Une information écrite plusieurs fois pour rien. | La salle B12 copiée pour chaque élève de 2A |
| Ligne orpheline | Une ligne dont la clé n’existe pas dans l’autre table. | Un élève en classe 2D |
| None | Le mot de Python qui veut dire : rien trouvé. | return None |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Pourquoi deux tables ?
On pourrait écrire la salle et le prof sur chaque ligne d’élève. Mais la salle de la 2A serait copiée vingt fois. Ce sont des doublons.
Si la salle change, il faudrait corriger vingt lignes. Avec deux tables, on la change une seule fois.
Les deux tables partagent une clé commune : id_classe.
À toi : lire les deux tables
eleves = [
{"nom": "Léa", "id_classe": "2A"},
{"nom": "Karim", "id_classe": "2B"},
{"nom": "Sofia", "id_classe": "2A"},
{"nom": "Hugo", "id_classe": "2C"},
]
classes = [
{"id_classe": "2A", "salle": "B12", "prof": "Mme Roux"},
{"id_classe": "2B", "salle": "A04", "prof": "M. Petit"},
{"id_classe": "2C", "salle": "C21", "prof": "Mme Diallo"},
]
print("Élèves :")
for eleve in eleves:
print(eleve["nom"], "est en", eleve["id_classe"])
print("Classes :")
for classe in classes:
print(classe["id_classe"], classe["salle"], classe["prof"])
# Dans quelle salle est Hugo ? Cherche à la main.
Exemple travaillé : suivre la clé
| Élève | id_classe | Ligne trouvée dans classes | Salle |
|---|---|---|---|
| Léa | 2A | 2A, B12, Mme Roux | B12 |
| Karim | 2B | 2B, A04, M. Petit | A04 |
| Sofia | 2A | 2A, B12, Mme Roux | B12 |
| Hugo | 2C | 2C, C21, Mme Diallo | C21 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Chercher la ligne qui correspond
Pour relier à la main, on fait comme pour trouver Hugo : on parcourt la table des classes et on compare les clés.
Dès que classe["id_classe"] est égal à eleve["id_classe"], on a trouvé.
On met cette recherche dans une fonction. Elle rend la classe trouvée, ou None si rien ne correspond.
À toi : une fonction qui cherche
eleves = [
{"nom": "Léa", "id_classe": "2A"},
{"nom": "Karim", "id_classe": "2B"},
{"nom": "Sofia", "id_classe": "2A"},
{"nom": "Hugo", "id_classe": "2C"},
]
classes = [
{"id_classe": "2A", "salle": "B12", "prof": "Mme Roux"},
{"id_classe": "2B", "salle": "A04", "prof": "M. Petit"},
{"id_classe": "2C", "salle": "C21", "prof": "Mme Diallo"},
]
def chercher_classe(classes, id_classe):
for classe in classes:
if classe["id_classe"] == id_classe:
return classe
return None
for eleve in eleves:
classe = chercher_classe(classes, eleve["id_classe"])
print(eleve["nom"], ": salle", classe["salle"], "avec", classe["prof"])
Exemple travaillé : la recherche pour Karim
| Étape | Classe regardée | Même clé que 2B ? |
|---|---|---|
| 1 | 2A | Non, on continue |
| 2 | 2B | Oui, on rend cette ligne |
| 3 | 2C | Jamais regardée : la fonction s’est arrêtée |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Contrôle rapide
À toi de jouer
Contrôle rapide
4 questionsTes réponses sont corrigées ici et ne sont pas conservées. Un compte garde tes résultats.