Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème dans Jeu de pendu simplifié

    12 décembre 2010 à 22:17:15

    Bonsoir tout le monde   
    J'ai passé toute cette après-midi a essayer d'écrire le code du pendu (mais version un peu simplifiée   ) mais ...   
    j'ai pas arreté de réflechir mais il y'a un probleme dans le bloc "Choix d'une lettre de la part du joueur et remplir le mot étoilé"
    ca me ferait plaisir que quelqu'un jette un coup d'oeil a mon code 
    et encore une fois merci 
    
    
    # -*-coding:Latin-1 -*
    
    import os
    from random import randrange
    
    
    print("\n------------------------Bienvenue dans mon pendule !!------------------------\n\n\n")
    
    #-------------------Confirmation d'entrée dans le jeu et identification du joueur------------------
    confirmation = "non"
    while (confirmation.lower() != "oui") :
        confirmation = input("Etes vous prets a jouer ?? ")
    nom_joueur = ""
    while (nom_joueur.strip() == "") :
        nom_joueur = input("Veuillez saisir votre nom : ")
    #--------------------------------------------------------------------------------------------------
    
    #---------------Ouverture et lecture du fichier "donnees.txt" transformer les mots en liste---------------
    mes_mots = open("donnees.txt", "r")
    contenu = mes_mots.read()
    liste_mots = contenu.split("\n")
    #---------------------------------------------------------------------------------------------------------
    
    #--------------Choix aléatoire d'un mot contenu dans le fichier "donnees.txt" par l'ordinateur--------------
    indice_mot_aleatoire = randrange(0, len(liste_mots))
    mot_aleatoire = liste_mots[indice_mot_aleatoire]
    nombre_etoile = len(mot_aleatoire)
    #-----------------------------------------------------------------------------------------------------------
    
    #---------------------Affichage du mot étoilé---------------------
    print("\nLe mot que vous recherchez est de la forme : ")
    mot_etoile = str()
    i = 0
    while (i < len(mot_aleatoire)) :
        mot_etoile = mot_etoile[0 : i] + "*" + mot_etoile[i + 1 : len(mot_aleatoire)]
        i += 1
    print(mot_etoile)
    #-----------------------------------------------------------------
        
    #-------------------------Choix d'une lettre de la part du joueur et Remplir le mot étoilé------------------
    mot_choisi = mot_etoile
    j = 0
    i = 0
    while ((j < 8) and (mot_choisi != mot_aleatoire)) :
        lettre_choisie = ""
        while (len(lettre_choisie.strip()) == 0) or (len(lettre_choisie.strip()) > 1) :    
            lettre_choisie = input("\nVeuillez entrer une seule lettre : ")
        while (i < len(mot_aleatoire)) :
            if (lettre_choisie in mot_aleatoire) and (i == 0) :
                mot_choisi = lettre_choisie + mot_aleatoire[1 : len(mot_aleatoire)]
                
            elif (lettre_choisie in mot_aleatoire) and (i != 0) :
                mot_choisi = mot_choisi[0 : i] + lettre_choisie + mot_choisi[i + 1 : len(mot_aleatoire)]
            i += 1
    
        print(mot_choisi)
        j += 1
        
    if (mot_choisi == mot_aleatoire) :
        print("\nFélicitations !!\n")
        print("Vous avez gagne en {0} coups !! Le mot secret était bien {1} .".format(j + 1, mot_aleatoire))
        print("\nVotre score dans cette partie s'éléve à ", str((j - len(mot_aleatoire))))
    elif (mot_choisi != mot_aleatoire) :
        print("\nDésolé vous avez perdu !!")
        print("\nLe mot secret est : ", mot_aleatoire)
    #----------------------------------------------------------------------------------------------------------
    
    #----------------------Fermeture du fichier "donnees.txt"----------------------
    mes_mots.close()
    #------------------------------------------------------------------------------
    
    
    os.system("pause")
    <titre1></titre1>
    
    • Partager sur Facebook
    • Partager sur Twitter
      12 décembre 2010 à 22:46:08

      effectivement c'est un peu tordu comme façon de faire ...
      tu peux peut-être t'inspirer de ça: http://www.siteduzero.com/forum-83-588 [...] html#r5709379
      lignes 29 à 32.
      • Partager sur Facebook
      • Partager sur Twitter

      Python c'est bon, mangez-en. 

        12 décembre 2010 à 23:10:19

        Merci :)
        mais ca m'aide pas trop vu que je n'ai pas encore lu le cours des classes :(
        autre suggestion ??
        • Partager sur Facebook
        • Partager sur Twitter
          13 décembre 2010 à 7:01:39

          rien à voir avec les class l'exemple que je t'ai donné; en gros ça fait ça ...

          mot_aleatoire = 'maison'
          mot_choisi = 'm***o*'
          lettre_choisie = 's'
          
          si 1ere lettre de mot_choisi n'est pas '*' alors retenir cette lettre
          sinon, si 1ere lettre de mot_aleatoire est lettre_choisie  alors retenir lettre_choisie
          
          si 2eme lettre de mot_choisi n'est pas '*' alors retenir cette lettre
          sinon, si 2eme lettre de mot_aleatoire est lettre_choisie  alors retenir lettre_choisie
          
          etc ...
          
          sortie = 1ere lettre retenue + 2eme lettre retenue + etc ...
          • Partager sur Facebook
          • Partager sur Twitter

          Python c'est bon, mangez-en. 

            13 décembre 2010 à 20:54:39

            Salut,

            Je te propose une "solution". J'ai essayé de ne pas trop m'éloigner de ton implémentation dans l'idée, mais j'ai apporté quelques
            modifications qui me semblent appropriées. Je pense que la partie qui t'intéressera sera la fonction "tryReplaceLetter".

            from random import choice
            
            DATAFILE = "donnees.txt"
            NOMBRE_ESSAIS = 8
            
            def startGame(message):
                confirmation = ""
                while confirmation.strip() != "oui":
                    confirmation = raw_input(message+"\n")
            
            def askName(message):
                name = raw_input(message)
                while name.strip() == "":
                    name = raw_input(message+"\n")
                return name
            
            def readWordList(filename):
                flist = open(filename, 'r')
                return [line.strip('\n') for line in flist]
            
            def chooseRandomWord(wordList):
                return choice(wordList)
            
            def askLetter(message):
                letter = raw_input(message)
                while len(letter.strip()) != 1:
                    letter = raw_input(message+"\n")
                return letter
            
            def tryReplaceLetter(mot_reference, mot_en_cours, nouvelle_lettre):
                mot_actualise = []
                for index, lettre in enumerate(mot_reference):
                    if lettre == nouvelle_lettre:
                        mot_actualise.append(lettre)
                    else:
                        mot_actualise.append(mot_en_cours[index])
                return "".join(mot_actualise)
            
            def main():
                startGame("Pret?")
                name = askName("Comment t'appelles-tu?")
                wordList = readWordList(DATAFILE)
                randomWord = chooseRandomWord(wordList)
                mot_en_cours = "*" * len(randomWord)
                print mot_en_cours
                for i in range(NOMBRE_ESSAIS):
                    mot_en_cours = tryReplaceLetter(randomWord, mot_en_cours, askLetter("Entrez une lettre:"))
                    print mot_en_cours
                    if mot_en_cours == randomWord:
                        print "Bravo %s, vous avez devinez le mot mystere" % name
                        return
                print "Dommage %s, tu as perdu.. le mot etait: %s" % (name, randomWord)
                return
            
            if __name__ == "__main__":
                main()
            


            Mon code fonctionne sous python 2.6 mais il devrait également fonctionner pour les versions ultérieures. Quelques commentaires:

            • Essaie d'utiliser plus de fonctions. Cela permet de mettre en évidence la logique de ton code (même si le programme est "petit")
            • Si tu es sous python 2.6, utilise raw_input() au lieu de input()
            • Pour choisir un élément aléatoire dans une liste, la fonction choice() du module random est plus adaptée que randrange()


            Voilà bon courage,

            • Partager sur Facebook
            • Partager sur Twitter
              13 décembre 2010 à 21:02:28

              @Abraxasz,
              très propre ce code, bravo.
              • Partager sur Facebook
              • Partager sur Twitter

              Python c'est bon, mangez-en. 

              Problème dans Jeu de pendu simplifié

              × 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