Opérations sur les dictionnaires
I. Appartenance⚓︎
Gaston a-t-il noté des oies dans son dictionaire ? ou des lapins ?⚓︎
Testez
Gaston a-t-il des poules ? Cliquez après avoir réfléchi ...
Gaston n'a pas de poule : vous le voyez en lisant le dictionnaire. Vous pouvez tester dans la console de l'exemple ci-dessus :
👉 Pourtant "poule" in ferme_gaston
est évalué à True
.
Pourquoi ?
👉 l'opérateur in
renvoie True
si la clé est présente. Peu importe la valeur associée à cette clé.
Testez avec une fonction
# Tests
(insensible à la casse)(Ctrl+I)
(Shift+Esc ; Ctrl pour inverser les colonnes)
(Esc)
Retenir :⚓︎
Appartenance d'une clé dans un dictionnaire
Soit mon_dico
un dictionnaire.
cle in mon_dico
est une expression qui renvoieTrue
si la clécle
existe dansmon_dico
etFalse
sinon.cle not in mon_dico
renvoieTrue
si la clécle
n'existe pas dansmon_dico
etFalse
sinon.
II. Comment accéder à une valeur ?⚓︎
Testez
# Tests
(insensible à la casse)(Ctrl+I)
(Shift+Esc ; Ctrl pour inverser les colonnes)
(Esc)
Retenir :⚓︎
Accéder à une valeur
Soit mon_dico
un dictionnaire.
mon_dico[cle]
renvoie la valeur associée à cle
si elle est présente dans le dictionnaire, sinon une erreur KeyError
se produit.
III. Comment modifier une valeur ?⚓︎
Testez
# Tests
(insensible à la casse)(Ctrl+I)
(Shift+Esc ; Ctrl pour inverser les colonnes)
(Esc)
Retenir :⚓︎
Modifier une valeur
Soit mon_dico
un dictionnaire.
Il suffit de faire une nouvelle affectation : mon_dico[cle] = nouvelle_valeur
IV. Comment supprimer un couple (clé, valeur)
?⚓︎
En utilisant del
⚓︎
Testez
# Tests
(insensible à la casse)(Ctrl+I)
(Shift+Esc ; Ctrl pour inverser les colonnes)
(Esc)
En utilisant pop
⚓︎
Testez
# Tests
(insensible à la casse)(Ctrl+I)
(Shift+Esc ; Ctrl pour inverser les colonnes)
(Esc)
Retenir :⚓︎
Supprimer une valeur
Soit mon_dico
un dictionnaire. Soit valeur
la valeur associée à cle
.
del mon_dico[cle]
supprime le couple (cle
,valeur
) demon_dico
.mon_dico.pop(cle)
supprime le couple (cle
,valeur
) demon_dico
et renvoie la valeur correspondante.
V. Comment ajouter un couple (clé, valeur)
?⚓︎
Ajoutez des dragons
Vous savez déjà rajouter des éléments dans un dictionnaires, puisque vous l'avez fait pour créer un dictionnaire à
partir d'un dictionnaire vide.
Compléter le script suivant pour ajouter "dragon": 2
# Tests
(insensible à la casse)(Ctrl+I)
(Shift+Esc ; Ctrl pour inverser les colonnes)
(Esc)
Retenir :⚓︎
Ajouter un couple (clé, valeur)
Soit mon_dico
un dictionnaire. Soit valeur
la valeur que l'on souhaite associer à cle
.
- Si la clé existe déjà
mon_dico[cle] = valeur
modifie la valeur associée, - sinon
mon_dico[cle] = valeur
ajoute la paire (cle
,valeur
)
VI. Quelle est la longueur d'un dictionnaire ?⚓︎
Testez
Essayez de trouver la syntaxe vous-même (pensez aux listes)
# Tests
(insensible à la casse)(Ctrl+I)
(Shift+Esc ; Ctrl pour inverser les colonnes)
(Esc)
Retenir :⚓︎
Longueur d'un dictionnaire
Soit mon_dico
un dictionnaire.
len(mon_dico)
renvoie le nombre de paires clé, valeur du dictionnaire.
VII. QCM⚓︎
Question
On considère le dictionnaire ferme_gaston = {"lapin": 5, "vache": 7, "cochon": 2, "cheval": 4}
On veut accéder au nombre de lapins. Quelle commande faut-il saisir ?
-
ferme_gaston[0]
-
ferme_gaston["lapin"]
-
ferme_gaston("lapin")
-
ferme_gaston[lapin]
-
On accède à une valeur grâce à une clé.ferme_gaston[0]
-
ferme_gaston["lapin"]
-
Il faut des crochets, non des parenthèses.ferme_gaston("lapin")
-
"lapin" est une chaîne de carctères. Ne pas oublier les guillemets.ferme_gaston[lapin]
Question
On considère le dictionnaire ferme_gaston = {"lapin": 5, "vache": 7, "cochon": 2, "cheval": 4}
Gaston a acheté 3 lapins. Il faut modifier le dictionnaire.
Quelle commande peut-on saisir ?
-
ferme_gaston[0] = 8
-
("lapin" : 5) = ("lapin" : 8)
-
ferme_gaston("lapin") = 8
-
ferme_gaston["lapin"] = 8
-
ferme_gaston["lapin"] = ferme_gaston["lapin"] + 3
-
On accède à une valeur grâce à une clé.ferme_gaston[0] = 8
-
("lapin" : 5) = ("lapin" : 8)
-
Il faut des crochets, non des parenthèses.ferme_gaston("lapin") = 8
-
ferme_gaston["lapin"] = 8
juste mais préférer la répose ci-dessous -
ferme_gaston["lapin"] = ferme_gaston["lapin"] + 3
Question
On considère le dictionnaire ferme_gaston = {"lapin": 5, "vache": 7, "cochon": 2, "cheval": 4}
On veut ajouter la paire "dragon : 2"
Quelle commande faut-il saisir ?
-
ferme_gaston["dragon": 2]
-
ferme_gaston["dragon"] = 2
-
2 = ferme_gaston["dragon"]
-
ferme_gaston["dragon", 2]
-
ferme_gaston("dragon", 2)
-
ferme_gaston["dragon": 2]
-
ferme_gaston["dragon"] = 2
-
2 = ferme_gaston["dragon"]
-
ferme_gaston["dragon", 2]
-
ferme_gaston("dragon", 2)
Question
On considère le dictionnaire ferme_gaston = {"lapin": 5, "vache": 7, "cochon": 2, "cheval": 4, "dragon": 2}
On veut supprimer la paire "dragon": 2
. Quelle commande faut-il saisir ?
-
del ferme_gaston[4]
-
del ("dragon")
-
del ferme_gaston("dragon")
-
del ferme_gaston("dragon": 2)
-
del ferme_gaston["dragon"]
-
On accède à une valeur grâce à une clé.del ferme_gaston[4]
-
del ("dragon")
-
del ferme_gaston("dragon")
-
del ferme_gaston("dragon": 2)
-
del ferme_gaston["dragon"]
Question
On considère le dictionnaire ferme_gaston = {"lapin": 6, "vache": 7, "cochon": 2, "cheval": 4, "dragon": 2}
Que vaut l'expression len(ferme_gaston)
?
- 5
- 10
- Un message d'erreur
- Rien
- 2
- 5 .C'est la longueur du dictionnaire. Il y a 5 paires (clés: valeur)
-
10 -
Un message d'erreur -
Rien -
2
VIII. Exercices⚓︎
Gaston compte ses animaux
On donne la fonction suivante où animal
est de type str
et ferme
de type dict
Quel est le type de variable renvoyé par la fonction appartient
?
Solution
Type booléen. La fonction renvoie True
ou False
.
Compléter la fonction nombre_animaux
. Cette fonction prend en paramètres animal
de type str
et ferme
de type dict
.
Elle renvoie la valeur associée à animal
si animal
est une clé de ferme
, et 0 sinon.
# Tests
(insensible à la casse)(Ctrl+I)
(Shift+Esc ; Ctrl pour inverser les colonnes)
(Esc)
✏️ Des Pokémon : Exercice "papier"⚓︎
L'énoncé⚓︎
Exercice à réaliser à l'écrit
Un Pokémon est modélisé par :
- son nom (chaîne de caractères),
- ses points de vie ou HP (nombre entier),
- sa puissance d’attaque (nombre entier),
- sa défense (nombre entier)
- sa vitesse (nombre entier),
- son ou ses types (liste de chaîne de caractères).
On représente un Pokémon par un dictionnaire.
Par exemple :
bulbizarre = {"Nom": "Bulbizarre", "HP": 45, "Attaque": 49,
"Défense": 49, "Vitesse": 45, "Type": ["Plante", "Poison"]}
1) On donne le Pokémon suivant : mystere = {"Nom": "Salamèche", "HP": 39, "Défense": 43, "Vitesse": 455, "Type": ["Feu"]}
(a) Quel est son nom? Préciser l’instruction permettant de le récupérer.
(b) Combien a-t-il de types "Type" ? Quelle(s) instruction(s) permet de le(s) récupérer ?
(c) La vitesse donnée est inexacte, elle est en fait de 65. Quelle instruction permet de corriger cette erreur ?
(d) Il manque la valeur de la puissance d’attaque de ce Pokémon. Elle est de 52. Quelle instruction faut-il saisir pour ajouter cette information ?
2) Donner le dictionnaire qui représente le Pokémon fragilady
qui a une défense de 75, une attaque de 60, une vitesse de 90, 70 points de vie, de type Plante
.
3) Dans les questions qui suivent, on supposera que le Pokémon passé en paramètre existe.
(a) Ecrire une fonction qui prend un Pokémon en paramètre et renvoie sa valeur d’attaque.
(b) Ecrire une fonction qui prend un Pokémon en paramètre et renvoie son nombre de types.
(c) Ecrire une fonction qui prend un Pokémon et une valeur entière en paramètre et renvoie True
si le Pokémon a une valeur de défense supérieure à la valeur passée en paramètre, False
sinon.
(d) Ecrire une fonction qui prend deux dictionnaires représentant des Pokémon en paramètres, et renvoie le nom du gagnant d'un combat entre eux.
Le premier paramètre représente un Pokemon attaquant, le second un Pokémon attaqué.
Nous choisissons la règle de jeu très simplifiée suivante : le Pokémon attaquant gagne si sa valeur d' "Attaque" est supérieure à la valeur de "Défense" de son adversaire. Si le Pokémon attaqué possède une valeur de "Défense" supérieure à la valeur d' "Attaque" de l'attaquant, il est vainqueur. Dans le cas où ces deux valeurs sont identiques, la fonction doit renvoyer "match nul".
⌛ Une correction viendra plus tard ...
# Tests
(insensible à la casse)(Ctrl+I)
(Shift+Esc ; Ctrl pour inverser les colonnes)
(Esc)