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)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Retenir :⚓︎
Appartenance d'une clé dans un dictionnaire
Soit mon_dico un dictionnaire.
cle in mon_dicoest une expression qui renvoieTruesi la clécleexiste dansmon_dicoetFalsesinon.cle not in mon_dicorenvoieTruesi la cléclen'existe pas dansmon_dicoetFalsesinon.
II. Comment accéder à une valeur ?⚓︎
Testez
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; 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)
(Alt+: ; 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)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
En utilisant pop⚓︎
Testez
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; 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_dicoet 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)
(Alt+: ; 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] = valeurmodifie la valeur associée, - sinon
mon_dico[cle] = valeurajoute 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)
(Alt+: ; 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") = 8ferme_gaston["lapin"] = 8juste mais préférer la répose ci-dessousferme_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"] = 22 = 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)
10Un message d'erreurRien2
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)
(Alt+: ; 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".
# Tests(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)