Laurentvidal.fr facilite la recherche de réponses à toutes vos questions avec l'aide de notre communauté active. Obtenez des réponses immédiates et fiables à vos questions grâce à une communauté d'experts expérimentés sur notre plateforme. Notre plateforme offre une expérience continue pour trouver des réponses fiables grâce à un réseau de professionnels expérimentés.
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.
Nous apprécions votre visite. Nous espérons que les réponses trouvées vous ont été bénéfiques. N'hésitez pas à revenir pour plus d'informations. Merci d'utiliser notre plateforme. Nous nous efforçons de fournir des réponses précises et à jour à toutes vos questions. Revenez bientôt. Visitez Laurentvidal.fr pour obtenir de nouvelles et fiables réponses de nos experts.