Cours :
On se base sur le document distribué la semaine dernière, document national publié sur le site d’accompagnement pour les nouveaux programmes de NSI :
Ce qu’en dit le programme :
Dictionnaires par clés et valeurs.
Construire une entrée de dictionnaire. Itérer sur les éléments d’un dictionnaire.
Il est possible de présenter les données EXIF d’une image sous la forme d’un enregistrement. En Python, les p-uplets nommés sont implémentés par des dictionnaires. Utiliser les méthodeskeys()
,values()
etitems()
.
Application :
Ce nouveau « type construit » est idéal pour reprendre et finir notre TP « Carnet d’adresses »…
On change de structure de données. On avait :
repertoire = [["Pierre", 42, " 06.07.08.09.10 ", "3 allée des bois LILLE"], ["Marie", 37, " 06.10.09.08.07 ", "42 rue des fraises STRASBOURG"], ["John Malkovich", 65, " 01.02.03.04.05 ", "HOLLYWOOD"]]
On va transformer notre répertoire en dictionnaire.
En effet, c’est une excellente structure de données pour une première base de données.
On reprend notre fonction de lecture du fichier contacts.csv
de notre TP « Carnet d’adresses » et on la réécrit ainsi :
def charge() : # initialisation : liste vide rep = {} # ouverture du fichier en lecture -> 'r' with open("contacts.csv", 'r') as fichier: # on récupère le contenu texte = fichier.read() # on le separe en lignes lignes = texte.split(sep = '\n') # print(lignes) # on parcourt les lignes for phrase in lignes: contact = phrase.split(sep = ";") # contact valable ? contact est une liste if len(contact) == 4: new = {} new['adresse'] = contact[3] new['tel'] = contact[2] # conversion de l'age en entier new['age'] = int(contact[1]) # ajout du contact au repertoire avec comme clé le nom nom = contact[0] rep[nom] = new fichier.close() #print(rep) return rep
Ainsi, la succession d’instructions
repertoire = charge() # menu() print(repertoire)
affiche :
{'Pierre': {'adresse': '3 allee des bois LILLE', 'tel': '06.07.08.09.10', 'age': 42}, 'Marie': {'adresse': '42 rue des fraises STRASBOURG', 'tel': '06.10.09.08.07', 'age': 37}, 'John Malkovich': {'adresse': 'HOLLYWOOD', 'tel': '01.02.03.04.05', 'age': 65}, 'Marchant': {'adresse': 'RUDLOFF', 'tel': '06.36.80.93.99', 'age': 46}, 'Nathan': {'adresse': "La-bas si j'y suis.", 'tel': '06.07.08.02.05', 'age': 17}} >>>
(J’ai rajouté quelques retours à la ligne pour plus de lisibilité 😉 )
Ainsi, avec un tél dictionnaire repertoire
:
>>> repertoire['Pierre'] >>> {'adresse': '3 allee des bois LILLE', 'tel': '06.07.08.09.10', 'age': 42} >>> repertoire['Marie']['age'] >>> 37 >>>
Pour lundi de la rentrée :
- implémenter la fonction d’affichage d’un contact dont on connaît le nom,
- implémenter la fonction d’affichage de tout le répertoire,
- implémenter la fonction d’ajout d’un contact,
- implémenter la fonction de sauvegarde du fichier
contacts.csv
À venir lundi à la rentrée :
- implémenter une fonction de recherche globale.