Listes de listes ou de dictionnaires
Considérons le tableau de couleurs ci-dessous décrivant différentes couleurs à l'aide de quatre descripteurs :
- leur nom,
- leur composante rouge (de 0 à 255),
- leur composante verte (de 0 à 255),
- leur composante bleue (de 0 à 255).
Couleur | Nom | Rouge | Vert | Bleu |
Noir | 0 | 0 | 0 | |
Blanc | 255 | 255 | 255 | |
Rouge | 255 | 0 | 0 | |
Vert | 0 | 255 | 0 | |
Bleu | 0 | 0 | 255 | |
Jaune | 255 | 255 | 0 | |
Cyan | 0 | 255 | 255 | |
Magenta | 255 | 0 | 255 | |
Argent | 192 | 192 | 192 | |
Gris | 128 | 128 | 128 | |
Bordeaux | 128 | 0 | 0 | |
Olive | 128 | 128 | 0 | |
Violet | 128 | 0 | 128 | |
Marine | 0 | 0 | 128 |
Listes de listes
Il est possible de représenter ces informations dans une liste Python. Chacun des éléments de cette liste est lui-même une liste décrivant une couleur :
liste_couleurs = [
["Noir", 0, 0, 0], # Couleur 0
["Blanc", 255, 255, 255], # Couleur 1
["Rouge", 255, 0, 0], # Couleur 2
["Vert", 0, 255, 0], # Couleur 3
["Bleu", 0, 0, 255], # Couleur 4
["Jaune", 255, 255, 0], # Couleur 5
["Cyan", 0, 255, 255], # Couleur 6
["Magenta", 255, 0, 255], # Couleur 7
["Argent", 192, 192, 192], # Couleur 8
["Gris", 128, 128, 128], # Couleur 9
["Bordeaux", 128, 0, 0], # Couleur 10
["Olive", 128, 128, 0], # Couleur 11
["Violet", 128, 0, 128], # Couleur 12
["Marine", 0, 0, 128] # Couleur 13
]
Remarque
On a ajouté des espaces afin de simplifier la lecture. Elles[^1] ne sont pas indispensables.
[^1]: En typographie, « espace » est un nom commun féminin.
Les informations décrivant une couleur étant décrites dans des sous-listes, elles sont accessibles en utilisant les indices :
Indice | 0 |
1 |
2 |
3 |
---|---|---|---|---|
Descripteur | "nom" |
"rouge" |
"vert" |
"bleu" |
Il est donc possible de récupérer le nom de la troisième couleur de la liste en faisant liste_couleurs[2][0]
qui renvoie "rouge"
.
Activité 1 - Liste de listes
On considère la liste décrite ci-dessus.
Cochez la ou les bonnes réponses.
- On peut accéder à la composante rouge de la première couleur en faisant
liste_couleurs[0][0]
-
liste_couleurs[4]
n'existe pas car il n'y a que quatre descripteurs -
liste_couleurs[5][2]
désigne la composante verte du jaune -
[c[0] for c in liste_couleurs]
permet de récupérer les noms de toutes les couleurs
-
liste_couleurs[0][0]
permet de récupérer le nom de la première couleur -
liste_couleurs[4]
renvoie toutes les informations décrivant le bleu -
liste_couleurs[5][2]
désigne la composante verte du jaune -
[c[0] for c in liste_couleurs]
permet de récupérer les noms de toutes les couleurs
Activité 2 - Requêtes (listes)
On travaille toujours avec la liste de listes décrite ci-dessus.
Compléter le script afin de d'effectuer les requêtes proposées :
Activité 3 - Nuances de gris (listes)
On travaille toujours avec la liste décrite ci-dessus.
Il est possible de convertir une couleur en noir et blanc en donnant à chacun de ses canaux la même valeur obtenue par la formule suivante :
Cette valeur \(Y\) est appelée niveau de gris.
Par exemple pour le rouge on obtient : \(Y = 0,299 \times 255 + 0,587 \times 0 + 0,114 \times 0 \approx 76\).
Compléter le code ci-dessous permettant d'obtenir la liste contenant le niveau de gris associé à chaque couleur de liste_couleurs
.
# Tests
(insensible à la casse)(Ctrl+I)
Listes de dictionnaires
Une autre approche est possible : au lieu de représenter les données dans une liste de listes, on utilise une liste de dictionnaires. Chaque couleur est décrite par un dictionnaire dont les clés sont les noms des descripteurs et les valeurs la valeur associée.
dico_couleurs = [
{"nom": "Noir", "rouge": 0, "vert": 0, "bleu": 0},
{"nom": "Blanc", "rouge": 255, "vert": 255, "bleu": 255},
{"nom": "Rouge", "rouge": 255, "vert": 0, "bleu": 0},
{"nom": "Vert", "rouge": 0, "vert": 255, "bleu": 0},
{"nom": "Bleu", "rouge": 0, "vert": 0, "bleu": 255},
{"nom": "Jaune", "rouge": 255, "vert": 255, "bleu": 0},
{"nom": "Cyan", "rouge": 0, "vert": 255, "bleu": 255},
{"nom": "Magenta", "rouge": 255, "vert": 0, "bleu": 255},
{"nom": "Argent", "rouge": 192, "vert": 192, "bleu": 192},
{"nom": "Gris", "rouge": 128, "vert": 128, "bleu": 128},
{"nom": "Bordeaux", "rouge": 128, "vert": 0, "bleu": 0},
{"nom": "Olive", "rouge": 128, "vert": 128, "bleu": 0},
{"nom": "Violet", "rouge": 128, "vert": 0, "bleu": 128},
{"nom": "Marine", "rouge": 0, "vert": 0, "bleu": 128},
]
Au sein de chaque dictionnaire, les informations sont identifiées par les clés. Il est plus facile de récupérer chaque valeur (sans avoir à compter les indices !).
Il est possible de récupérer le nom de la troisième couleur de la liste en faisant liste_couleurs[2]["nom"]
qui renvoie là encore "rouge"
.
Activité 4 - Liste de dictionnaires
On considère la liste décrite ci-dessus.
- On peut accéder à la composante rouge de la première couleur en faisant
dico_couleurs[0][rouge]
-
dico_couleurs[4][2]
renvoie la composante bleue du bleu -
dico_couleurs["jaune"]["vert"]
désigne la composante verte du jaune -
[c["nom"] for c in dico_couleurs]
permet de récupérer les noms de toutes les couleurs
-
"rouge"
est une chaîne de caractères, les guillemets sont indispensables - Il faut faire
dico_couleurs[4]["bleu"]
- La couleur jaune est à l'indice
5
de la liste -
[c["nom"] for c in dico_couleurs]
permet bien de récupérer les noms de toutes les couleurs
Activité 5 - Requêtes (dictionnaires)
On travaille toujours avec la liste de dictionnaires décrite ci-dessus.
Compléter le script afin de d'effectuer les requêtes proposées :
# Tests
(insensible à la casse)(Ctrl+I)
Activité 6 - Nuances de gris (dictionnaires)
On travaille toujours avec la liste de dictionnaires ci-dessus.
Reprendre l'exercice « Nuances de gris (listes) » avec cette structure de données.
# Tests
(insensible à la casse)(Ctrl+I)
# Tests
(insensible à la casse)(Ctrl+I)