Partage
  • Partager sur Facebook
  • Partager sur Twitter

TP jeu pendu

Sujet résolu
    16 novembre 2014 à 17:39:22

    Bonjour,

    Je suis bloqué depuis quelques temps dans l'écriture du jeu du pendu. Je pense que l'erreur provient de l'enregistrement de mes fichiers ... 

    Le message d'erreur qui apparait est :

    Traceback (most recent call last):
      File "C:/Users/pierre/Desktop/Boulot/informatique/open classrooms/TP PENDU/Pendu.py", line 75, in <module>
        enregistrer_scores(score)
      File "C:\Users\pierre\Desktop\Boulot\informatique\open classrooms\TP PENDU\fonctions.py", line 23, in enregistrer_scores
        fichier_scores = open(nom_fichier_scores, "wb")
    FileNotFoundError: [Errno 2] No such file or directory: ''



    Voici le code:

    Donnees.Py

    nom_fichier_scores=""
    
    liste_mots = ["cheval","chat","maison","politique","weed","ami","ordinateur","physique"]
    
    chance = 8

    Fonctions.Py

    import pickle
    import os
    
    from random import choice
    from Donnees import liste_mots
    from Donnees import nom_fichier_scores
    
    
    
    def recup_scores():
        if os.path.exists(nom_fichier_scores):
            fichier_scores = open(nom_fichier_scores, "rb")
            mon_depickler = pickle.Unpickler(fichier_scores)
            scores = mon_depickler.load()
            fichier_scores.close()
        else:
            scores={}
        return(scores)
    
    def enregistrer_scores(scores):
        fichier_scores = open(nom_fichier_scores, "wb")
        mon_pickler=pickle.pickler(fichier_scores)
        mon_pickler.dump(scores)
        fichier_scores.close()
    
    def creation_mot():
        return choice(liste_mots)
    
    def demander_lettre():
        lettre = input("saisissez une lettre: ")
        if lettre.isalpha()==False:
            print("Veuillez saisir une lettre")
            return(demander_lettre())
        lettre=lettre.lower()
    
        if len(lettre)>1:
            print("Veuillez saisir une seule lettre")
            return(demander_lettre())
    
        else:
            return(lettre)
    
    
    def comparaison_lettre_mot(lettre,mot):
        a=0
        for i, L in enumerate(mot):
            if L == lettre:
                a=1
        if a==1:
            return(True)
        else:
            return(False)
    
    
    def nouveau_mot(mot,lettres_trouvees):
        mot_masque=""
        for lettre in mot:
            if lettre in lettres_trouvees:
                mot_masque+=lettre
            else:
                mot_masque+="*"
        return(mot_masque)
    

    Pendu.Py

    import os
    
    from Donnees import chance
    from Donnees import liste_mots
    from Donnees import nom_fichier_scores
    from Donnees import liste_mots
    from Donnees import nom_fichier_scores
    from fonctions import demander_lettre
    from fonctions import comparaison_lettre_mot
    from fonctions import nouveau_mot
    from fonctions import creation_mot
    from fonctions import recup_scores
    from fonctions import enregistrer_scores
    import pickle
    
    
    score = recup_scores()
    
    nom_utilisateur = input("Saisissez votre nom d'utilisateur: ")
    
    if nom_utilisateur not in score.keys():
        score[nom_utilisateur] = 0
    
    print("Vous avez {} points".format(score[nom_utilisateur]))
    rejouer = "o"
    
    while rejouer == "o":
    
        lettres_trouvees = []
        mot = creation_mot()
        print("Le mot que vous devez chercher fait {} caractères".format(len(mot)))
        print("Vous avez 8 chances")
    
        while chance > 0:
    
            while 1:
                lettre = demander_lettre()
                if lettre in lettres_trouvees:
                    print("Vous avez déja saisis cette lettre")
                else:
                    break
    
            if comparaison_lettre_mot(lettre, mot) == False:
                print("cette lettre ne fais pas partit du mot !!")
                chance -= 1
                print("il vous reste {} chance".format(chance))
            else:
                lettres_trouvees.append(lettre)
                print("Le mot est maintenant:", nouveau_mot(mot, lettres_trouvees))
    
            if nouveau_mot(mot, lettres_trouvees) == mot:
                print("Vous avez gagné !!!!")
                score[nom_utilisateur] += chance
                break
    
        if chance == 0:
            print("vous avez perdu !!!")
    
        rejouer = input("Voulez vous rejouez? O/N")
        rejouer = rejouer.lower()
    
    enregistrer_scores(score)
    print("Vous finissez la partie avec {0} points.".format(score[nom_utilisateur]))
    
    os.system("pause")



    Votre aide me serait bien utile !!

    :)



    -
    Edité par Yonisos 16 novembre 2014 à 22:45:54

    • Partager sur Facebook
    • Partager sur Twitter
      16 novembre 2014 à 19:54:11

      Ben c'est normal, nom_fichier_scores est une chaine vide, logique qu'il ne trouve pas ton fichier :)
      • Partager sur Facebook
      • Partager sur Twitter
        16 novembre 2014 à 22:37:28

        Oui en effet , j'ai renommé nom_fichier_scores = "score"

        Par contre une autre erreur apparaît:

        Traceback (most recent call last):
          File "C:/Users/pierre/Desktop/Boulot/informatique/open classrooms/TP PENDU/Pendu.py", line 19, in <module>
            score = recup_scores()
          File "C:\Users\pierre\Desktop\Boulot\informatique\open classrooms\TP PENDU\fonctions.py", line 16, in recup_scores
            scores = mon_depickler.load()
        EOFError: Ran out of input
        



        • Partager sur Facebook
        • Partager sur Twitter
          16 novembre 2014 à 23:15:37

          J'ai résolu le problème précèdent! Mais il en reste un autre, décidément !

          Traceback (most recent call last):
            File "C:/Users/pierre/Desktop/Boulot/informatique/open classrooms/TP PENDU/Pendu.py", line 64, in <module>
              enregistrer_scores(score)
            File "C:\Users\pierre\Desktop\Boulot\informatique\open classrooms\TP PENDU\fonctions.py", line 28, in enregistrer_scores
              mon_pickler=pickle.pickler(fichier_scores)
          AttributeError: 'module' object has no attribute 'pickler'


          Pour moi cette erreur voudrait dire que la fonction pickler n'est pas contenu dans mon module pickle??

          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            17 novembre 2014 à 7:04:42

            Salut Yonisos,<br/> Cette erreur survient souvent lorsqu'un fichier dans le dossier où ce script est se nomme pickle.py. Donc lorsque tu importes pickle.py depuis ton script, Python ne sait pas trop quel fichier importer, celui que tu as créé a la priorité.

            • Partager sur Facebook
            • Partager sur Twitter
              17 novembre 2014 à 21:07:55

              Bonsoir,

              J'ai vérifié je n'ai aucun fichier nommé pickle.py dans mon dossier TP pendu, ou se trouve mon script. :/

              • Partager sur Facebook
              • Partager sur Twitter
                17 novembre 2014 à 21:19:10

                Salut,

                As-tu essayé avec un P majuscule à pickler: pickle.Pickler ;)

                • Partager sur Facebook
                • Partager sur Twitter
                Précepte: Le mieux est l'ennemi du bien
                  17 novembre 2014 à 21:51:39

                  Oui en effet le problème venait de la ! comment se fait-il? 

                  En tout cas merci, le programme marche a merveille maintenant! :)

                  • Partager sur Facebook
                  • Partager sur Twitter
                    17 novembre 2014 à 21:56:31

                    "comment se fait-il"

                    Tout simplement parce que python prend en compte la casse (majuscule - minuscule). Ainsi, pickler est différent de Pickler qui est différent de PiCkLeR, qui est différent de .....

                    Pour connaître les objets ou méthodes d'un module/objet, il suffit d'utiliser la méthode dir():

                    dir(list)
                    dir(str)
                    dir(pickle)
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Précepte: Le mieux est l'ennemi du bien
                      17 novembre 2014 à 22:06:34

                      Merci beaucoup c'est clair maintenant! :)
                      • Partager sur Facebook
                      • Partager sur Twitter

                      TP jeu pendu

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown