Problème suppression information dico
RésoluBonjour,
J'ai un problème avec un dictionnaire. Quand j'ajoute plusieurs informations, l'information précédente est supprimée.
Mon but est de faire un répertoire des inscrits.
Voilà le code :
import tkinter app = tkinter.Tk() app.geometry("250x395") app.title("QuizCool") """ variable diverse """ n_b_inscript = 0 """ disctionnaire divers """ personne = { "pseudo" : { }, "prénom" : { }, "nom" : { }, "mot de passe" : { }, "objectif" : { } } """ fonction diverse """ def quitter(): app.quit() def set_profil(defpseudo, defprenom, defnom, defobjetctif, defpass): global n_b_inscript personne["pseudo"] = defpseudo print(defpseudo) personne["nom"] = defnom print(defnom) personne["prénom"] = defprenom print(defprenom) personne["objectif"] = defobjetctif print(defobjetctif) personne["mot de passe"] = defpass print(defpass) print(personne) n_b_inscript += 1 print(f"il y a {n_b_inscript} personnes inscites") def get_info_profil(): nom = Entry_nom.get() prenom = Entry_prenom.get() pseudo = Entry_pseudo.get() mot_de_passe = Entry_pass.get() set_profil(pseudo, prenom, nom, 1, mot_de_passe) def pers(): print(personne) # -----------------section d'inscirption----------------- label_bv = tkinter.Label(app, text="bienvenue sur QuizCool", bg="green", height=2, width=10) Frame_size = tkinter.LabelFrame(app, text="Zone d'inscription", border=5) Label_entry_nom = tkinter.Label(Frame_size, text="Nom") Entry_nom = tkinter.Entry(Frame_size) Label_entry_prenom = tkinter.Label(Frame_size, text="prenom") Entry_prenom = tkinter.Entry(Frame_size) Label_entry_pseudo = tkinter.Label(Frame_size, text="Pseudo") Entry_pseudo = tkinter.Entry(Frame_size) Label_entry_pass = tkinter.Label(Frame_size, text="Mot de passe") Entry_pass = tkinter.Entry(Frame_size) buton_confirm_pass = tkinter.Button(Frame_size, text="Confirmer", command=get_info_profil) buton_quitter = tkinter.Button(app, text="quitter", bg="green", height=1, width=5, command=quitter) Label_Radio = tkinter.Label(Frame_size, text="Sélectionne l'une des cases suivantes.\n" "Ces sélections ont pour but de présenter\n" "tes objectifs sur la plateforme.") Radio_2 = tkinter.Radiobutton(Frame_size, text="Consommateur", value=0) Radio_1 = tkinter.Radiobutton(Frame_size, text="Créateur", value=1) Radio_3 = tkinter.Radiobutton(Frame_size, text="Créateur et consommateur", value=2) buton_inscri = tkinter.Button(Frame_size, text="click", command=pers) # -----------------deuxième section----------------- # -----------------section d'inscirption----------------- label_bv.pack(side="top", fill='x') Frame_size.pack(fill="x") Label_entry_nom.pack() Entry_nom.pack() Label_entry_prenom.pack() Entry_prenom.pack() Label_entry_pseudo.pack() Entry_pseudo.pack() Label_entry_pass.pack() Entry_pass.pack() Label_Radio.pack() Radio_2.pack() Radio_1.pack() Radio_3.pack() buton_confirm_pass.pack() buton_inscri.pack() buton_quitter.pack(side="bottom", fill='x') # -----------------deuxième section----------------- app.mainloop()
- Le dictionnaire (personne) est déclaré ligne 16,
- La fonction en charge d'ajouter des informations dans le dictionnaire est déclarée ligne 42 (set_profil),
- La fonction get_info_profil est déclarée ligne 58 et passe les arguments à set_profil.
Merci d'avance
A voir également:
- Problème suppression information dico
- Forcer suppression fichier - Guide
- Information d'identification réseau - Guide
- Suppression compte gmail - Guide
- Suppression page word - Guide
- Suppression pub youtube - Accueil - Streaming
2 réponses
Bonjour,
Plusieurs choses :
- Quand tu rédiges un message, veille à soigner l'orthographe, à ne pas utiliser d'abréviations et à faire des phrases complètes (j'ai réécrit ton message #1).
- Quand tu as un problème, donne un bout de code minimal qui met ton problème en évidence.
Comme Phil l'indique, pour une clé donnée du dictionnaire personne, la fonction set_profil telle que tu l'as écrite écrase les informations précédentes (s'il y en avait).
Pour moi les problèmes sont multiples :
- Plutôt que d'utiliser un dictionnaire de dictionnaire, tu devrais utiliser :
- soit une liste de dictionnaire (chaque dictionnaire correspond à une personne)
- soit un dictionnaire de dictionnaire (le dictionnaire principal a pour clé l'identifiant de la personne et lui associe en donnée le dictionnaire contenant les détails de son profil) ; dans ce cas, la clé peut être construire à la volée à partir d'un ou plusieurs attributs du profil à ajouter/modifier (généralement, le login).
- Quelle que soit la structure retenue, tu pourrais alors obtenir directement le nombre d'inscrits avec len(personnes), ce qui t'éviterait d'avoir recours à une variable globale (qui n'est jamais une bonne idée).
Exemple :
personnes = dict() def ajouter(personnes, personne): pseudo = personne["pseudo"] if pseudo in personnes.keys(): print("pseudo déjà utilisé!") else: personnes[pseudo] = personne def modifier(personnes, personne): pseudo = personne["pseudo"] if pseudo not in personnes.keys(): print("pseudo inconnu!") else: personnes[pseudo] = personne def get_num_inscrits(personnes): return len(personnes) p1 = { "pseudo" : "toto", # ... } p2 = { "pseudo" : "tata", # ... } ajouter(personnes, p1) ajouter(personnes, p2) print(get_num_inscrits(personnes))
Bonne chance
Donc l'idée serait de créer une liste pour chaque caractére ?