Zoofast.fr fournit une plateforme conviviale pour partager et obtenir des connaissances. Découvrez les informations dont vous avez besoin de la part de nos professionnels expérimentés qui fournissent des réponses précises et fiables à toutes vos questions.

Bonsoir,
j'ai fait un projet d'une répertoire téléphonique et je veux savoir s'il est près où s'il est bien fait pour être un projet dont le dictionnaire est inclu dedans. Quelqu'un peut m'aider s'il vous plaît, merci d'avance.

MENU=int(input("Saisir 1 pour ecrire un repertoire, 2 pour rechercher un numéro et 0 pour quitter : "))
a=1
while a==1:
while MENU==1:
numero=input("Entrer un numéro : ")
monFichier=open('fichier.txt','a')
monFichier.write("Le numéro : ")
monFichier.write(numero)
monFichier.write("\n")
monFichier.close()
print('Numéro Enregistré)

print("")

nom=input("Entrer un nom maintenant : ")
monFichier=open('fichier.txt','a')
monFichier.write("Nom : ")
monFichier.write(nom)
monFichier.write("\n")
monFichier.write("\n")
monFichier.close()
print('Nom enregistré ')
MENU=int(input("Saisir 1 pour ecrire un repertoire, 2 pour rechercher un numéro et 0 pour quitter : "))

while MENU==2:

recherche=input("Entrer le nom de la personne : ")
monFichier=open('fichier.txt','a')
monFichier.write(recherche)
monFichier.write("\n")
monFichier.close()
print(numero)
MENU=int(input("Saisir 1 pour ecrire un repertoire, 2 pour rechercher un numéro et 0 pour quitter : "))
while MENU==0:

MENU=int(input("Saisir 1 pour ecrire un repertoire, 2 pour rechercher un numéro et 0 pour quitter : "))


Sagot :

Bonsoir,

Dans l'ensemble, il y a de l'idée, mais comme tu peux le voir, tu n'utilises jamais de dictionnaire. (En plus, tu nous montres un travail fait par toi même ce qui donne envie d'aider ;) ).

Pour ce type de travail, il est fortement conseillé de faire des fonctions pour les différentes tâches. Cela permet de mieux s'organiser et de trouver plus facilement les erreurs possible.

J'ai utilisé le module Pickle qui permet de stocker des objets (notamment un dictionnaire) et qui en plus stocke les données dans des fichiers très compactes grâce aux modes "wb" et "rb" (mais rend le fichier texte illisible pour un humain).

J'ai jouté quelques fonctions comme la possibilité de supprimer un numéro.

Le dictionnaire est de la forme:

dico = {"nom1": "numero1", "nom2": "numero2"}

J'ai essayé de faire une gestion des erreurs de saisie (lettre à la place d'un entier, utilisateur qui met un nombre mais qui ne fait pas parti des options...)

Attention, il est important de choisir "Quitter" pour sauvegarder les modifications.

Voici le code:

import pickle

try: #On lit le fichier s'il existe.

   with open("fichier.txt", "rb") as fichier: #On récupère le contenu du fichier.

       UP = pickle.Unpickler(fichier)

       dico = UP.load()

except: #S'il n'existe pas, on crée un dictionnaire vide.

   dico = {}  

def ajouter_numero(nom, numero):

   dico[nom] = numero

   print("Numéro enregistré !")

def rechercher_numero(nom):

   try:

       print("Voici le numéro de {}: {}".format(nom, dico[nom]))

   except:

       print("Nom introuvable !")

def rechercher_nom(numero):

   for nom, num in dico.items():

       if num == numero:

           print("Il s'agit de {} !".format(nom))

           return #On sort de la fonction

   print("Numéro introuvable !")

def supprimer_nom(nom):

   try:

       del dico[nom]

       print("Numéro de {} supprimé.".format(nom))

   except:

       print("Nom introuvable !")

       

def supprimer_numero(numero):

   for nom, num in dico.items():

       if num == numero:

           del dico[nom]

           print("Numéro de {} supprimé.".format(nom))

           return #On sort de la fonction

   print("Numéro introuvable !")

#La gestion des exceptions, je ne suis pas trop fan donc ce n'est pas très optimisé, mais ça marche.

MENU = 9

while MENU not in [0, 1, 2, 3]:

   try:

       MENU = int(input("Que voulez vous faire ? \n 1 - Ajouter un numéro \n 2 - Rechercher un numéro \n 3 - Supprimer un numéro \n 0 - Quitter \n Choix: "))

   except:

       print("Saisie incorrecte !")

       

while MENU != 0: #Tant que l'utilisateur ne veut pas quitter.

   if MENU == 1:

       nom = input("Nom: ")

       numero = input("Numéro: ")

       ajouter_numero(nom, numero)

   elif MENU == 2:

       try:

           choix = int(input("Recherche par: \n 1 - Nom \n 2 - Numéro \n Choix: ")) #Choix de recherche par nom ou par numéro.

       except:

           print("Saisie incorrecte !")

           choix = 9

       if choix == 1:

           nom = input("Nom: ")

           rechercher_numero(nom)

       elif choix == 2:

           numero = input("Numéro: ")

           rechercher_nom(numero)

   elif MENU == 3:

       try:

           choix = int(input("Supprimer par: \n 1 - Nom \n 2 - Numéro \n Choix: "))

       except:

           print("Saisie incorrecte !")

           choix = 9

       if choix == 1:

           nom = input("Nom: ")

           supprimer_nom(nom)

       elif choix == 2:

           numero = input("Numéro: ")

           supprimer_numero(numero)

   MENU = 9

   while MENU not in [0, 1, 2, 3]:

       try:

           MENU = int(input("Que voulez vous faire ? \n 1 - Ajouter un numéro \n 2 - Rechercher un numéro \n 3 - Supprimer un numéro \n 0 - Quitter \n Choix: "))

       except:

           print("Saisie incorrecte !")

with open("fichier.txt", "wb") as fichier:

   P = pickle.Pickler(fichier)

   P.dump(dico)

     

Je t'ai mis ci-joint un screen de l'utilisation.

Il est possible que tout ne fonctionne pas (surtout sur la gestion des erreurs de saisie), je n'ai pas tout testé il me semble mais ça devrait aller.

Si tu as des questions sur quelque chose que tu ne comprends pas dans mon code, n'hésite pas à demander en commentaire.

Bonne soirée.

View image Thomas756
Merci d'utiliser cette plateforme pour partager et apprendre. Continuez à poser des questions et à répondre. Chaque contribution que vous faites est appréciée. Chaque question trouve sa réponse sur Zoofast.fr. Merci et à très bientôt pour d'autres solutions.