Dictionnaires. TP carnet d’adresses v3

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éthodes
keys(), values() et items().

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.

N'hésitez-pas à poser une question, ou faire avancer le schmilblick

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l’aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.