IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Grosse galère dictionnaire


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 14
    Par défaut Grosse galère dictionnaire
    Salut à vous tous !
    Je suis devant un très gros problème , je n'arrive pas à créer un code permettant de créer un fichier et d'y mettre un dictionnaire de dictionnaire en utilisant pickle ! Sachant que le dictionnaire interne est demandé par "input"

    Voilà mon code... je vous avoue que je suis très très embrouillé du coup !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    import pickle
     
     
    dico={1:input("Question 1:"),2:input("Question 2:"),3:input("Question 3:"),4:input("Question 4:"),5:input("Question 5:"),6:input("Question 6:"),7:input("Question 7:"),8:input("Question 8:"),9:input("Question 9:"),10:input("Question 10:"),11:input("Question 11:"),12:input("Question 12:"),13:input("Question 13:"),14:input("Question 14:"),15:input("Question 15:"),16:input("Question 16:"),17:input("Question 17:"),18:input("Question 18:"),19:input("Question 19:"),20:input("Question 20:")}
     
    Fichier=open("quizzm.txt", "wb")
    pickle.dump(dico, Fichier)
    Fichier.close()
     
     
    #dico2={1:{input("Réponse 1:")},2:{input("Réponse 2:")},3:{input("Réponse 3:")},4:{input("Réponse 4:")},5:{input("Réponse 5:")},6:{input("Réponse 6:")},7:{input("Réponse 7:")},8:{input("Réponse 8:")},9:{input("Réponse 9:")},10:{input("Réponse 10:")},11:{input("Réponse 11:")},12:{input("Réponse 12:")},13:{input("Réponse 13:")},14:{input("Réponse 14:")},15:{input("Réponse 15:")},16:{input("Réponse 16:")},17:{input("Réponse 17:")},18:{input("Réponse 18:")},19:{input("Réponse 19:")},20:{input("Réponse 20:")}}
     
    #Jusqu'à là ça va, c'est après que c'est galère
     
    dico1={1:input("Prop1"),2:input("Prop2"),3:input("Prop3")}
    dico2={1:input("Prop1"),2:input("Prop2"),3:input("Prop3")}
    dico3={1:input("Prop1"),2:input("Prop2"),3:input("Prop3")}
    dico4={1:input("Prop1"),2:input("Prop2"),3:input("Prop3")}
    dico5={1:input("Prop1"),2:input("Prop2"),3:input("Prop3")}
    dico6={1:input("Prop1"),2:input("Prop2"),3:input("Prop3")}
    dico7={1:input("Prop1"),2:input("Prop2"),3:input("Prop3")}
    dico8={1:input("Prop1"),2:input("Prop2"),3:input("Prop3")}
    dico9={1:input("Prop1"),2:input("Prop2"),3:input("Prop3")}
    dico10={1:input("Prop1"),2:input("Prop2"),3:input("Prop3")}
    dico11={1:input("Prop1"),2:input("Prop2"),3:input("Prop3")}
    dico12={1:input("Prop1"),2:input("Prop2"),3:input("Prop3")}
    dico13={1:input("Prop1"),2:input("Prop2"),3:input("Prop3")}
    dico14={1:input("Prop1"),2:input("Prop2"),3:input("Prop3")}
    dico15={1:input("Prop1"),2:input("Prop2"),3:input("Prop3")}
    dico16={1:input("Prop1"),2:input("Prop2"),3:input("Prop3")}
    dico17={1:input("Prop1"),2:input("Prop2"),3:input("Prop3")}
    dico18={1:input("Prop1"),2:input("Prop2"),3:input("Prop3")}
    dico19={1:input("Prop1"),2:input("Prop2"),3:input("Prop3")}
    dico20={1:input("Prop1"),2:input("Prop2"),3:input("Prop3")}
    dico0={dico1,dico2,dico3,dico4,dico5,dico6,dico7,dico8,dico9,dico10,dico11,dico12,dico13,dico14,dico15,dico16,dico17,dico18,dico19,dico20}
     
     
    Fichier=open("reponsem.txt", "wb")
     
    pickle.dump(dico0, Fichier)
     
     
    Fichier.close()
    Voilà si vous pouviez m'éclairer un peu sur la façon de faire^^

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Tu ne peux pas construire ton dictionnaire avec une liste mais avec une succession de clés valeurs.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dico0={dico1,dico2,dico3,dico4,.........}
    ça c'est une liste et ça pas bon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    >>> d0 = {'aa': 5, 'bb': 10}
    >>> d1 = {'cc': 42, 'dd': 77}
    >>> d3 = {d0, d1}
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: unhashable type: 'dict'
    >>> d3 = {"d0": d0, "d1": d1}
    >>> d3
    {'d0': {'aa': 5, 'bb': 10}, 'd1': {'cc': 42, 'dd': 77}}
    >>>

  3. #3
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Pour cette utilisation, le module shelve est beaucoup plus simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import shelve
     
    dico = {1:input("Question 1:"), 2:input("Question 2:"), 3:input("Question 3:"), 4:input("Question 4:"), 5:input("Question 5:"), 6:input("Question 6:"), 7:input("Question 7:"), 8:input("Question 8:"), 9:input("Question 9:"), 10:input("Question 10:"), 11:input("Question 11:"), 12:input("Question 12:"), 13:input("Question 13:"), 14:input("Question 14:"), 15:input("Question 15:"), 16:input("Question 16:"), 17:input("Question 17:"), 18:input("Question 18:"), 19:input("Question 19:"), 20:input("Question 20:")}
     
    # sauvegarde du dictionnaire dico sous le nom "dico" dans le fichier "dicosave.shv"
    d = shelve.open('dicosave.shv')
    d["dico"] = dico
    d.close()
     
     
    # chargement du dictionnaire "dico" du fichier "dicosave.shv" sous le nom dico2
    d2 = shelve.open('dicosave.shv')
    dico2 = d2["dico"]
    d2.close()

  4. #4
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 14
    Par défaut merci
    Merci pour vos très rapides réponses, le problème est résolu grâce à vous !
    Désolé pour le retard des remerciements

  5. #5
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    @Displayed,

    L'objet dictionnaire comme utilisé par la variable dico, est le type même d'utilisation sans intérêt.

    Il faut savoir que dans listes, tuples ou autres conteneurs, il est possible d'en connaître l'indice et donc d'éviter ce type de construction avec des dictionnaires.
    Ensuite, il est difficile de croire utiliser la programmation, en écrivant 20 fois la même choses (question 1, question 2, ..., question 20), qui justement est faites pour simplifier ce genre de difficulté.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    QUESTIONS = []
    for i in range(20):
        question = "Question {}:".format(i+1)
        q = input(question)
        QUESTIONS.append(q)
    On peut donc faire ceci avec le mélange questions + propositions

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    QUESTIONS = []
    PROPOSITIONS = []
    DICO = {}
     
    for i in range(20): # questions
        responses = []
        question = "Question {}:".format(i+1)
        q = input(question)
        QUESTIONS.append(q)
        for j in range(3): # propositions
            proposition = "Proposition {}: ".format(j+1)
            p = input(proposition)
            responses.append(p)
        PROPOSITIONS.append(tuple(responses))
        for s, tup in zip(QUESTIONS, PROPOSITIONS): # création du dictionnaire
            DICO[s] = tup
     
    print(DICO) # pour voir
    Maintenant c'est à prendre ou à laisser, selon vos choix, j'avoue que d'avoir fait tout ça, et se rendre compte qu'on utilise la programmation à bon escient, peut plomber, difficile de revenir en arrière.

    Bonne continuation...

  6. #6
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 14
    Par défaut
    Waw ! Tu viens de me fournir un super raccourci, c'est vrai que je me suis dit qu'il y avait forcément un raccourci pour cette suite de questions...

    Merci beaucoup, et en fait ça m'aidera surtout pour la suite du programme qui est très (comme tout programme) répétitif

    Et pour la recherche des erreurs c'est beaucoup plus pratique ^^


    ~~~~~~

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [OpenOffice][Texte] Grosse galère pour installer Antidote HD sous Linux
    Par toma3769 dans le forum OpenOffice & LibreOffice
    Réponses: 2
    Dernier message: 24/07/2012, 14h37
  2. Réponses: 1
    Dernier message: 08/04/2008, 13h38
  3. prendre le controle d'un pc distant sans grosses manip
    Par aladjiasse dans le forum Développement
    Réponses: 13
    Dernier message: 10/04/2006, 15h14
  4. galère avec my2pg.pl
    Par fafet dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 16/07/2003, 10h10
  5. Réponses: 14
    Dernier message: 17/03/2003, 18h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo