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 :

petit probleme sur un fichier avec pickle


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2016
    Messages : 6
    Points : 2
    Points
    2
    Par défaut petit probleme sur un fichier avec pickle
    bonjour j'ai creer un programme python me permettant d'enregistrer et d'imprimer quand voulu le tableau des scores 5 en l'occurence ecrire a la fin du jeu et pouvoir le lire apres avoir enregistrer ce score petit probleme c est un programme que j'ai trouver sur internet il est dans l'ensemble bien je pense mais il y avais un probleme de tri voici le code que j ai pu trouver sur internet mais qui trie je trouve mal
    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
    import pickle
    import os
    global high_scores
     
    def setup_scores():
        global high_scores
        high_scores = {}
     
        if os.path.isfile('highscores.pkl'):
            with open("highscores.pkl", "rb") as h:
                high_scores = pickle.load(h)
        else:
            high_scores = {"Adam Smith": 65536, "John Doe": 10000}
     
    def save_score(name, score):
        new_score = (name, score)
     
        if new_score[0] in high_scores:
            if new_score[1] > high_scores[new_score[0]]:
                high_scores[new_score[0]] = new_score[1]
        else:
            high_scores[new_score[0]] = new_score[1]
     
        with open("highscores.pkl","wb") as out:
            pickle.dump(high_scores, out)
     
    def print_scores():
        for name, score in high_scores.items():
            print("{{name:>{col_width}}} | {{score:<{col_width}}}".format(col_width=(80-3)//2).format(name=name, score=score))
     
    setup_scores()
    save_score(raw_input('Name:'), raw_input('Score:')) # inputs only for testing, can use variables instead
    print_scores()
    voici mon programme actuel ou j'utilise un tri comme nous ayant appris par "insertion"
    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
    import pickle
    import os
    global high_scores
     
    def setup_scores():
        global high_scores
        high_scores = {}
     
        if os.path.isfile('highscores.pkl'):
            with open("highscores.pkl", "rb") as h:
                high_scores = pickle.load(h)
        else:
            high_scores = {"Adam Smith": 65536, "John Doe": 10000}
     
    def save_score(name, score):
        new_score = (name, score)
        for i in range (1,len(high_scores)): #on precise que ces instructions vont se repeter sur la longueur de la suite
            n=high_scores[i] #selectionne l'element dans la suite
            p=i
            while p>0 and high_scores[p-1]>n:
                high_scores[p]=high_scores[p-1]
                p=p-1 # decalage des chiffres dans la suite
            if p!=i:
                high_scores[p]=n
     
        with open("highscores.pkl","wb") as out:
            pickle.dump(high_scores, out)
     
    def print_scores():
        for name, score in high_scores.items():
            print("{{name:>{col_width}}} | {{score:<{col_width}}}".format(col_width=(80-3)//2).format(name=name, score=score))
     
    setup_scores()
    save_score(input('Name:'), input('Score:')) # inputs only for testing, can use variables instead
    print_scores()
    Le message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Traceback (most recent call last):
      File "C:/Python34/fichier python/highscoretest.py", line 34, in <module>
        save_score(input('Name:'), input('Score:')) # inputs only for testing, can use variables instead
      File "C:/Python34/fichier python/highscoretest.py", line 18, in save_score
        n=high_scores[i] #selectionne l'element dans la suite
    KeyError: 1
    ce que j'aimerai c est faire en sorte que le tri fonctionne et j'aimerai aussi changer le format du fichier de .pkl en .txt

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    high_scores est un dictionnaire(et non une liste de nombres). Un dictionnaire est rarement trié suivant la "valeurs" des clefs et à moins de changer de structure de données, çà ne sert à pas grand chose d'essayer de "trier" avant de sauvegarder. Par contre vous pouvez trier après avoir lu les données sauvées avec sorted:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> high_scores = {"Adam Smith": 65536, "John Doe": 10000}
    >>> sorted(high_scores.items(), key=lambda z: z[1])
    [('John Doe', 10000), ('Adam Smith', 65536)]
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2016
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    je suppose que ce code doit etre mis a la place de l ancien code qui me permettait de trier mais ma question est que signifie la partie apres contenue dans sorted ?

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par Kokorob Voir le message
    je suppose que ce code doit etre mis a la place de l ancien code qui me permettait de trier mais ma question est que signifie la partie apres contenue dans sorted ?
    sorted est une des fonctions "builtins" de Python.
    Si vous ne l'avez jamais vue, voilà une occasion pour vous familiariser avec la documentation et le "How to".

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2016
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    chez moi cela ne fonctionne pas il y a une erreur et rien ne m est afficher :/

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par Kokorob Voir le message
    chez moi cela ne fonctionne pas il y a une erreur et rien ne m est afficher :/
    Peut-être mais sans poster ce que vous avez fait avec le message d'erreur... personne ne pourra vous aider.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2016
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    enfaite je ne sais pas vraiment ou je dois mettre la ligne de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Traceback (most recent call last):
      File "C:\Python34\fichier python\highscoretest.py", line 28, in <module>
        sorted(high_scores.items(), key=lambda z: z[1])
    TypeError: unorderable types: str() < int()

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    L'erreur dit seulement que certaines valeurs associées aux clefs de high_scores sont des chaînes de caractères.
    Moi j'ai écrit: high_scores = {"Adam Smith": 65536, "John Doe": 10000}.
    Il n'est pas interdit d'y mettre autre chose mais si vous ne comprenez pas ce que vous faites, difficile pour vous d'imaginer que poster le contenu de high_scores est pertinent pour savoir ce que vous avez voulu y mettre dedans.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2016
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    je suis débutant donc oui je ne comprends pas apparemment je souhaitais créer un tableau des scores (nom et scores) a la base a laide d'un fichier.txt qui trierai les score des plus faibles au plus fort (5 scores maximum) qui me l'affiche et qui rajoute les nouveaux meilleurs scores.

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par Kokorob Voir le message
    je suis débutant donc oui je ne comprends pas apparemment je souhaitais créer un tableau des scores (nom et scores) a la base a laide d'un fichier.txt qui trierai les score des plus faibles au plus fort (5 scores maximum) qui me l'affiche et qui rajoute les nouveaux meilleurs scores.
    Vous avez déjà le tableau high_scores et deux fonctions pour sauvegarder et relire le fichier.
    Et pour l'instant, vous ne montrez toujours pas ce que vous avez bien pu mettre dans high_scores pour que çà plante.

    Vous progresseriez plus vite en prenant le temps d'apprendre les bases avec un tuto..

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. [osCommerce] Petit probleme sur os commerce
    Par carlatocer dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 22/10/2008, 15h25
  2. Petit probleme sur le réencodage d'un fichier son
    Par Bkdenice dans le forum Composants
    Réponses: 4
    Dernier message: 20/10/2008, 13h28
  3. Petit probleme listage de fichier
    Par jabaka dans le forum IRC / mIRC
    Réponses: 9
    Dernier message: 16/01/2008, 12h00
  4. Une petite question sur le fichier htaccess
    Par namstou3 dans le forum Langage
    Réponses: 2
    Dernier message: 04/12/2007, 11h01
  5. petit probleme sur mon code
    Par MORPHEUS50 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 13/05/2007, 18h16

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