Partage
  • Partager sur Facebook
  • Partager sur Twitter

Jeu du pendu

    18 octobre 2020 à 10:31:58

    Bonjour,

    Je lance une bouteille à la mer. J'ai créé un jeu du pendu mais je bloque depuis 2 semaines. Lorsque le joueur trouve la première lettre de mon mot secret il gagne et même s'il n'a pas trouvé les autres lettres et je n'arrives pas à comprendre pourquoi. Pour les autres lettres ça fonctionne.

    Ci dessous la copie de mon code :

    import random

    IMAGES_PENDU = ['''

      +---+

          |

          |

          |

         ===''','''

      +---+

      0   |

          |

          |

         ===''','''

      +---+

      0   |

      |   |

          |

         ===''','''

      +---+

      0   |

     /|   |

          |

         ===''','''

      +---+

      0   |

     /|\  |

          |

         ===''','''

      +---+

      0   |

     /|\  |

     /    |

         ===''','''

      +---+

      0   |

     /|\  |

     / \  |

         ===''']

    mots = 'effet tache contraignant futur paysan utiliser informatique fabrication energie quantite sacrifice or vorace des lors facilement preference recycle cahier chien vaillant baisser redoubler effort si difficulte decupler force agile enfoncer griffe rapide course qualite affirmer superiorite prestige veloce discuter chose banal ennuyer melancolie chatain fonce dent eclatant bouche permanence esquisser parler calme teinte beige exprimer brouillard gras luire vert grenouille'.split()

    def choisirMotAuHasard(listeMots):

        # Retourne un mot au hasard parmi ceux d'une liste

        indexMot = random.randint(0, len(listeMots)-1)

        return listeMots[indexMot]

    def affichage(lettresManquantes, lettresCorrectes, motSecret):

        print(IMAGES_PENDU[len(lettresManquantes)])

        print()

        print('Mauvaises lettres : ', end=' ')

        for lettre in lettresManquantes:

            print(lettre, end=' ')

        print()

        blanc = '_'*len(motSecret)

        #Remplace les tirets par les lettres correctement devinées

        for i in range(len(motSecret)):

            if motSecret[i] in lettresCorrectes:

                blanc = blanc[:i] + motSecret[i] + blanc[i+1:]

        # Affiche le mot secret avec des espaces entre les lettres.

        for lettre in blanc:

            print(lettre, end=' ')

        print()

    def devinez(dejaDevine):

        #Affiche la lettre saisie par le joueur. S'assure qu'il s'agit d'une unique lettre et de rien d'autres.

        while True:

            print('Propose une lettre.')

            proposition = input()

            proposition = proposition.lower()

            if len(proposition) != 1:

                print('Propose une seule lettre STP.')

            elif proposition in dejaDevine:

                print('Tu as déjà demandé cette lettre.')

            elif proposition not in 'abcdefghijklmnopqrstuvwxyz':

                print('Propose une LETTRE STP.')

            else:

                return proposition

    def jouerEncore():

        # Retourne True si le joueur veut recommencer, False sinon.

        print('Veux-tu rejouer (oui ou non) ?')

        return input().lower().startswith('o')

    print('P E N D U')

    lettresManquantes = ' '

    lettresCorrectes = ' '

    motSecret = choisirMotAuHasard(mots)

    jeuTermine = False

    while True:

        affichage(lettresManquantes, lettresCorrectes, motSecret)

        # Invite le joueur à proposer une lettre

        proposition = devinez(lettresManquantes + lettresCorrectes)

        if proposition in motSecret:

            lettresCorrectes = lettresCorrectes + proposition

            #Vérifie si le joueur a gagné

            toutesLesLettresTrouve = True

            for i in range(len(motSecret)):

                if motSecret[i] not in lettresCorrectes:

                    touteLesLettresTrouve = False

                    break

                if toutesLesLettresTrouve:

                    print('Oui ! Le mot secret est "'+motSecret+ '" ! Tu as gagné cette partie mais tu ne gagneras pas la prochaine fois !!!')

                    jeuTermine = True

        else:

            lettresManquantes = lettresManquantes + proposition

        #Vérifie si le joueur a perdu

        if len(lettresManquantes) == len(IMAGES_PENDU)-1:

               affichage(lettresManquantes, lettresCorrectes, motSecret)

               print('J ai gagné. Je suis le plus fort. ah ah ah !!!\nAprès '+str(len(lettresManquantes)-1)

                     + ' mauvaises lettres et '

                     + str (len(lettresCorrectes)-1)

                     + ' lettres exactes, le mot secret était "'

                     + motSecret + '"".')

               jeuTermine = True

        # Demande au joueur s'il veut recommencer (seulement si la partie est finie).

        if jeuTermine:

            if jouerEncore():

                lettresManquantes = ' '

                lettresCorrectes = ' '

                jeuTermine = False

                motSecret = choisirMotAuHasard(mots)

            else:

                break

    Si vous avez une explication, je vous en serais reconnaissant car là je sèches.
    Par avance Merci
    Seb
    • Partager sur Facebook
    • Partager sur Twitter
      18 octobre 2020 à 11:48:03

      Bonjour,

      Le message qui suit est une réponse automatique activée par un membre de l'équipe. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention.
      Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé.

      Pour plus d'informations, nous vous invitons à lire les règles générales du forum

      Merci de colorer votre code à l'aide du bouton Code

      Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton Code de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: python;">Votre code ici</pre>.

      Merci de modifier votre message d'origine en fonction.

      Liens conseillés

      • Partager sur Facebook
      • Partager sur Twitter
        19 octobre 2020 à 16:16:06

        A priori, je dirai un problème d'indentation du if toutesLesLettresTrouve: qui devrait être aligné avec le for et non le if précédent (si l'indentation est a peu près bien passé dans le copier/coller; mais ça serait plus évident si le code était dans les balises de codes </> comme demandé)
        • Partager sur Facebook
        • Partager sur Twitter

        Jeu du 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