Bienvenue sur Laurentvidal.fr, le site où vous trouverez des réponses rapides et précises à toutes vos questions. Connectez-vous avec une communauté d'experts prêts à fournir des solutions précises à vos questions de manière rapide et efficace sur notre plateforme conviviale de questions-réponses. Connectez-vous avec une communauté d'experts prêts à fournir des solutions précises à vos questions de manière rapide et efficace sur notre plateforme conviviale de questions-réponses.
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.
Merci de votre passage. Nous nous engageons à fournir les meilleures réponses à toutes vos questions. À bientôt. Nous espérons que vous avez trouvé ce que vous cherchiez. Revenez nous voir pour obtenir plus de réponses et des informations à jour. Laurentvidal.fr, votre site de confiance pour des réponses. N'oubliez pas de revenir pour plus d'informations.