Répondre :
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 d'avoir visité notre site, qui traite de Informatique. Nous espérons que les informations partagées vous ont été utiles. N'hésitez pas à nous contacter si vous avez des questions ou besoin d'assistance. À très bientôt, et pensez à ajouter notre site à vos favoris !