Garder le contact !

Les amis !

Photo by Kimson Doan on Unsplash

La soirée approche de sa fin. C'est la dernière fois que vous voyez certains d'entre vous avant un très long moment. Vous ne voulez pas perdre le contact. Vous décidez donc de conserver un certain nombre d'information pour chaque participant :

  • Le nom de famille
  • le prénom
  • le numéro de téléphone mobile
  • l'adresse de courrier électronique
  • le pseudo sur instagram
  • l'adresse postale (vous vous êtes promis de vous envoyer des cartes postales, avec un défi sur la plus belle et la plus originale)

Ça commence à faire pas mal d'information. Bien sur, comme vous êtes le plus doué pour programmer, tout le monde s'attend à ce que vous fassiez ça en deux temps trois mouvement pour que le carnet d'adresse puisse être transmis aux uns et aux autres.

L'idée de faire une liste pour chaque élément semble ne pas être une bonne idée. Là, ça va déjà faire 6 listes différentes. Et si on rajoute des éléments ? Et si certains éléments sont optionnels ? On risque d'oublier par exemple que Maxence n'a pas de compte Instagram, et si ça n'est pas bien codé, on risque de tout décaler après Maxence !

Bref, il faut trouver une autre solution.

Les dictionnaires : un autre type construit

Pour garder ensemble des informations, au dela des tableaux, il y a un autre type construit : le dictionnaire. Là ou le tableau range les données de façon ordonnée et les numérote, le dictionnaire lui les étiquette avec des étiquettes qui ont une signification.

Un tableau fonctionne en associant à chaque case numérotée un contenu comme dans l'exemple ci dessous

Une structure de tableau

Un dictionnaire lui va associer fonctionner avec des paires clefs/valeurs. On associe à une clef (et non pas à un numéro de case) une valeur. Imaginez par exemple que l'on souhaite caractériser dans un magasin de vétement les pantalons en vente. On pourrait avoir le dictionnaire représenté ci dessous :

Une structure de dictionnaire

Les dictionnaires en Python

Création d'un dictionnaire

En Python, un dictionnaire peut être créé avec son contenu directement. Par exemple, le code suivant pourrait être le début de votre annuaire. Notez que pour afficher le contenu d'un dictionnaire, vous pouvez utiliser la fonction print

mon_dico = {"nom": "Durand", "prenom": "Christophe", "date de naissance": "29/02/1981"}

Il existe une autre possibilité. Vous pouvez aussi créer un dictionnaire vide en ne mettant rien entre les deux accolades. Ensuite, vous pouvez ajouter très simplement des éléments aux dictionnaire : il vous suffit de préciser le couple clef valeur en utilisant la même notation que dans un tableau, comme dans le code ci-dessous

mon_dico = {}
mon_dico["nom"] = "Durand"
mon_dico["prenom"] = "Christophe"
mon_dico["date de naissance"] = "29/02/1981"

Accéder aux éléments d'un dictionnaire

Vous pouvez accéder aux éléments d'un dictionnaire de la même façon que vous accéder aux éléments d'un tableau. Il suffit d'indiquer la valeur de la clef entre les crochets, comme dans l'exemple ci dessous :

mon_dico = {"nom": "Durand", "prenom": "Christophe", "date de naissance": "29/02/1981"}
var_nom = mon_dico["nom"]
var_prenom = mon_dico["prenom"]
var_naissance = mon_dico["date de naissance"]
print('Bonjour je suis', var_prenom, var_nom,', je suis né le', var_naissance)
À faire vous même

À votre avis, que va afficher le code ci dessus ? Vérifiez votre réponse.

Modifier les éléments du dictionnaire

Lorsque l'on affecte une valeur à la clef d'un dictionnaire, si cette clef n'existe pas, le couple clef/valeur est créé, mais si la clef existe, le couple clef/valeur est modifié. Imaginez un dictionnaire qui contient le nombre de cageots de fruits disponible dans un magasin de produits frais. Si l'on vend une cagette de pommes, on peut représenter ainsi l'opération :

mes_fruits = {"poire": 3, "pomme": 4, "orange": 2}
mes_fruits["pomme"] = mes_fruits["pomme"] - 1
À faire vous même

À votre avis, que contiendra le dictionnaire à chaque étape du code ci dessus ? Vérifiez votre réponse.

À faire vous même

On a fait une erreur dans l'enregistrement de Christophe Durand .... le 29 février 1981 n'existe pas, ce n'est pas une année bisextile ! Modifiez l'enregistrement du dictionnaire pour indiquer que ça date de naissance est le 29 mars 1981. Attention ! on ne modifie pas la définition du dictionnaire, on modifie le contenu du dictionnaire à postériori

Supprimer les éléments d'un dictionnaire

On peut aussi assez facilement supprimer un couple clef/valeur d'un dictionnaire. Imaginons que dans notre magasin de fruit, après avoir fait l'inventaire, on se rend compte que les poires sont abimées (c'est fragile les poires) et qu'il faut les supprimer de l'inventaire. Pour cela, il suffit d'utiliser l'instruction del comme dans cet exemple :

mes_fruits = {"poire": 3, "pomme": 4, "orange": 2}
del mes_fruits['poire']
À faire vous même

À votre avis, que contient le dictionnaire après l'éxécution du code ci dessus ? Vérifiez votre réponse.

Remarque : on aurait aussi pu mettre la quantité de poires à 0.

Parcourir un dictionnaire

Enfin, lorsque l'on a un dictionnaire, en dehors de l'accès à certains éléments, on peut vouloir afficher la totalité des éléments d'un dictionnaire, ou les modifier. Pour cela, il va falloir parcourir le dictionnaire, de la même façon que l'on a parcouru le tableau.

Pour cela, il y a trois possibilités, qui utilisent toute la boucle for :

  • On peut parcourir le dictionnaire en utilisant les clefs. C'est la méthode la plus courante
  • On peut s'intéresser au valeurs uniquement
  • On peut aussi vouloir utiliser le couple clef/valeur pour chaque élément du dictionnaire
Parcours avec les clefs

Reprenons notre dictionnaire du début, sans l'erreur

mon_dico = {"nom": "Durand", "prenom": "Christophe", "date de naissance": "29/03/1981"}

Si l'on souhaite parcourir les clefs du dictionnaire, on peut y accéder grâce à la méthode keys qui va retourner un itérateur sur l'ensemble des clefs

for clef in mon_dico.keys():
    print("la clef", clef, "du dictionnaire correspond à la valeur :",mon_dico[clef])
À faire vous même

À votre avis, que va produire l'éxécution du code ci dessus ? Vérifiez votre réponse.

En fait, cette façon de parcourir un dictionnaire est tellement courante qu'il en existe une version abrégée :

for clef in mon_dico:
    print("la clef", clef, "du dictionnaire correspond à la valeur :",mon_dico[clef])
Parcours suivant les valeurs

La méthode values permet elle d'obtenir un itérateur sur les variables. Reprenons notre dictionnaire sur les fruits du primeur, et calculons le nombre total de cagettes :

mes_fruits = {"poire": 3, "pomme": 4, "orange": 2}
nb_cagettes = 0
for nb in mes_fruits.values():
    nb_cagettes += nb

print(nb_cagettes)
À faire vous même

À votre avis, que va produire l'éxécution du code ci dessus ? Vérifiez votre réponse.

Parcours par clef et valeur

Enfin, il est possible de parcourir un dictionnaire en utilisant à la fois les clefs et les valeurs grâce à la méthode items :

mes_fruits = {"poire": 3, "pomme": 4, "orange": 2}
print ("Stock de fruits :")
for fruit, quantite in mes_fruits.items():
    print (f"{fruit} : {quantite}")
À faire vous même

À votre avis, que va produire l'éxécution du code ci dessus ? Vérifiez votre réponse.

En résumé ...

Relisez les paragraphes ci dessus et faites une fiche de résumé qui montre un programme qui fait toutes les actions suivantes :

À retenir
  • Création d'un dictionnaire pré-rempli
  • Création d'un dictionnaire vide
  • Ajout d'un couple clef/valeur
  • Accès à un élément du dictionnaire
  • Modification d'un élément du dictionnaire
  • suppression d'un élément du dictionnaire
  • les 3 parcours d'un dictionnaire avec keys(), values(),items()

Mini projet d'annuaire de contacts

Nous allons maintenant passer à l'application qui nous intéresse. Un carnet d'adresse. Vous allez créer une liste de contact. Chaque contact est un dictionnaire qui contient les éléments suivants :

  • Le nom de famille
  • le prénom
  • le numéro de téléphone mobile
  • l'adresse de courrier électronique
  • le pseudo sur instagram
  • le pseudo sur snapchat
  • l'adresse postale (vous vous êtes promis de vous envoyer des cartes postales, avec un défi sur la plus belle et la plus originale)
  • le surnom

Vous allez :

  • Créer un premier contact qui a vos coordonnées
  • Créer une fonction qui permet d'afficher les contact
  • Créer une fonction qui permet de supprimer un contact
  • Créer une fonction pour afficher un contact (à partir de son numéro)

Pour cela, vous aurez à disposition le squelette du programme à compléter