La problématique
Nous avons réussi à avoir une douzaine d'algoblobs en mouvement. Mais pour cela, il nous a fallu créer autant de listes qu'il y avait de caractéristiques. Une liste pour les abscisses, une liste pour les ordonnées, etc. Cette approche a été efficace mais elle porte en germe un certain nombre de problème
Nos algoblobs sont différents. On peut imaginer que certains vont avoir une caractéristique et pas d'autres. Par exemple, certains algoblobs vont pulser, avec une frequence de pulsation. Cette caractéristique, si on la stocke dans une liste, va exister pour certains et pour pas d'autres.
Il existe une solution qui réside dans l'utilisation des dictionnaires.
Un dictionnaire
Pour les précurseurs des algoblobs, comme le professeur CHOM, un dictionnaire est un objet du siècle passé dans lequel on cherchait la définition des mots. C'est ce principe qui est important : à un mot (la clef de recherche) est associé sa définition (la valeur dans le dictionnaire). En informatique, on va avoir le même principe. Un dictionnaire, comme une liste, est un ensemble de données. Mais au lieu d'être accessible par un indice numérique, elles sont accessibles au moyen d'une clef.
Imaginons que l'on veuille stocker les informations des produit d'un magasin de meuble. Pour chaque meuble, on pourra stocker les dimensions (hauteur, largeur, profondeur), le poids, le nombre de pièces, la couleur, le nom, la présence en rayon (le client peut le prendre seul ou il doit passer au stock). Ces informations peuvent être stocké dans un dictionnaire. Voyons concrêtement comment on fait cela avec Python.
Créer le dictionnaire
Il existe deux méthodes pour créer un dictionnaire. La première utilise la fonction
dict
. La seconde est d'utiliser la notation avec les accolades
#première méthode
monDico = dict()
# sedonde méthode
modDico2 = {}
Ajouter ou modifier des éléments
Pour ajouter ou modifier un élément, on va utiliser comme pour les listes la notation entre crochet. Au lieu d'avoir l'indice numérique de la position de l'élérment entre les crochets, on aura la clef
# On crée une entrée dans le dictionnaire
monDico['prix'] = 560
# La clef prix est maintenant associé à une valeur.
# On peut la modifier. C'est les soldes !
monDico['prix'] = 500
Il y a aussi une possibilité de donner des valeurs directement à la création du dictionnaire
monDico = {'prix': 560, 'poids': 50, 'couleur' : 'blanc', 'enRayon' : True}
On peut d'ailleurs, dans la déclaration d'un dictionnaire, aller à la ligne pour avoir des choses plus lisibles
monDico = {'prix': 560,
'poids': 50,
'couleur' : 'blanc',
'enRayon' : True}
Accéder à un élément du dictionnaire
La aussi, simplement, il suffit d'utiliser la notation entre crochet
print("Le prix de ce meuble est de ",str(monDico['prix])," euros")
Supprimer un élément du dictionnaire
Pour supprimer un élément du dictionnaire, on utilise la fonction del
. Le code
suivant va supprimer le couple clef/valeur associé au poids de monDico :
del(monDico['poids'])
Parcourir le dictionnaire
Comme une liste, un dictionnaire peut être parcouru grâce à une boucle avec
for
et in
. Dans ce cas là, ce sont les clefs qui sont parcourues
Essayez le code suivant
Notez bien que l'on a pas de guillemets autour de clef dans monDico[clef]
. C'est tout à fait normal.
clef
est une variable qui prendra successivement les valeurs 'nom'
,
'prenom'
et 'courriel'
- Un dictionnaire est une structure de données indexée par des clefs
- On crée un dictionnaire avec
monDico = dict()
oumonDico={}
- On peut alimenter le dictionnaire à la création
- On accéde aux dictionnaire pour lire, écrire ou modifier grâce aux crochets :
monDico[clef]
Un dictionnaire pour réunir nos algoblobs
Les algoblobs étaient tout écartelés dans l'espace du programmes, et leurs âmes éparpillées risquaient le pire : la disparition par le bug. Alors j'ai consigné chacun d'eux dans un livre, leur livre. Leur dictionnaire. Et chacun a retrouvé son unité.
in Interview du professeur CHOM par Nora SKITTEL
Notre plus gros problème était d'avoir des algoblobs répartis entre différentes listes. Désormais, nous allons avoir une seule liste, chaque élément de cette liste étant étant un dictionnaire qui contient les informations sur un algoblob.
Chaque algoblob sera défini par un dictionnaire. Notez que pour les clefs, vous pouvez prendre un nom plus court, il n'y a pas de risque de collision avec d'autres parties du programme. Par exemple, nous pouvons nommer l'ascisse simplement x. Ce sera bien l'abscisse de l'algoblob, puisque cette information est dans son dictionnaire. Voici une façon de déclarer un algoblob si l'on utilise un dictionnaire et que les valeurs sont tirées aléatoirement :
bob = { 'x' : uniform(0,largeur),
'y' : uniform(0,hauteur),
'vx' : uniform(-5,5),
'vy' : uniform(-5,5),
'r' : uniform(10,30)
}
Si l'on veut créer tous nos algoblobs dans une boucle, on utilisera une liste vide, puis avec append, on ajoutera les dictionnaires un par un.
- Reprenez votre dernier programme sur les algoblobs et ouvrez le dans l'éditeur Python que vous utilisez
- Enregistrez le sous un nouveau nom (par exemple dictionnaire.py)
- modifiez le pour que les algoblobs soient crées avec des dictionnaires. Vous devez modifier la partie de la création, mais aussi l'éxécution
- Testez et savourez votre programme