TP carnet d’adresses v3 – partie 1

Il fallait faire pour ce lundi de la rentrée, depuis le TP du 10 février dernier  :

  • 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,

Personne ou presque n’avait travaillé, IL FAUT BOSSER pour réussir en NSI comme dans les autres spécialités !

On corrige :

def affiche_fiche(nom):
    if nom in repertoire.keys():
        dico = repertoire[nom]
        #print(dico)
        print(nom,"{} ans, tel : {}\n{}".format(dico['age'],dico['tel'], dico['adresse']))
    else :
        print("Pas d'entrée :", nom)

def affiche_tout():
    for cle in repertoire:
        affiche_fiche(cle)

def creer_nouveau(): # comme en classe avec un test en plus 😉
    nom = input("Quel est ton nom ?")
    age = int(input("Quel est l'age ?"))
    num = input("Quel est ton 06 ?")
    adr = input("Quelle est ton adresse ?")
    if nom in repertoire:
        print("Le contact", nom, "existe déjà")
    else :
        repertoire[nom] = {'age' : age, 'tel' : num, 'adresse' : adr}

def affiche_menu():
    print("\nMenu :\n")
    print("N\t\tNouvelle fiche")
    print("A\t\tAffiche tout le répertoire")
    print("A\tnom\tAffiche la fiche du contact avec ce nom")
    print("R\tcible\tRecherche la cible dans le répertoire")

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:
            #print(phrase)
            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
        
       
def menu():
    
    reponse = "Truc" # pour rentrer dans while

    while reponse != 'q' and reponse != 'Q':
        affiche_menu()    
        reponse = input("Votre commande : ")
        if reponse == 'N':
            creer_nouveau()
        elif reponse == 'A':
            affiche_tout()
        elif reponse[:2] == 'A ':
            affiche_fiche(reponse[2:])
        elif reponse[:2] == 'R ':
            resultat = recherche(reponse[2:])
            if len(resultat) > 0:
                for truc in resultat :
                    affiche_fiche(truc)
            else :
                print("Pas trouvé", reponse[2:])
            
            
    print("Sortie du programme")
    
repertoire = charge()
print(repertoire)
print(repertoire.keys())

menu()
#sauvegarde()

Un exemple de fichier contacts.csv pour que ce code fonctionne :

Pierre;42;06.07.08.09.10;3 allee des bois LILLE
Marie;37;06.10.09.08.07;42 rue des fraises STRASBOURG
John Malkovich;65;01.02.03.04.05;HOLLYWOOD
Marchant;46;06.36.80.93.99;RUDLOFF
Nathan;17;06.07.08.02.05;La-bas si j'y suis.

A CHERCHER POUR MERCREDI :

  • implémenter la fonction de sauvegarde du fichier contacts.csv
  • 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.