Probleme de boucle python (jeux pendu)

illana -  
jee pee Messages postés 31980 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
Je suis désolée de vous déranger. Je suis débutante dans python, je dois réaliser un pendu. J'ai réussi a faire pas mal de chose.
Lorsque je gagne la partie parce que j'ai trouver le mot je n'arrive pas a sortir du jeu, il va continuer de me proposer de choisir une lettre parmi le mot déjà trouvé...
en exemple je vous met la console :

quelles listes voulez-vous? facile,normal ou difficile?
>facile
['_', '_', '_', '_', '_']
choisis une lettre : p
Attention!! Vous venez d'utiliser 1 des 6 tentatives
['p']
choisis une lettre : t
Félicitation !! Vous y êtes presque
['t', '_', '_', '_', '_']
choisis une lettre : tasse
félicitation,vous avez gagné
choisis une lettre e
Félicitation !! Vous y êtes presque
['t', '_', '_', '_', 'e']
choisis une lettre


(comme vous pouvez le voir les 4 dernières lignes je doit rejouer sur le même mot ...)

Je ne comprend pas comment contourner ce problèmes... pouvez vous m'aider ?

------------------------------------------------
Voici mon code :
------------------------------------------------

# -*- coding: utf-8 -*-
import random

continuer = True
trouve= True
while continuer:
    print("quelles listes voulez-vou? facile,normal ou difficile?")
    entree = None
    while entree is None:
        entree = input('>')
        if entree not in ('facile', 'normal', 'difficile'):
            entree = None

    # creerliste de mots
    listemot = ['bonjour', 'soleil', 'beurre', 'ordinateur', 'chocolat', 'animaux', 'batiment']
    listemotfacile = ['chat', 'chien', 'coq', 'tasse', 'pendu', 'fleur']
    listemotdifficile = ['teledetection', 'stratification', 'dictionnaire', 'radiateur']

    # print (listemot)

    # choix au hazard
    if entree == 'facile': motordi = random.choice(listemotfacile)
    if entree == 'normal': motordi = random.choice(listemot)
    if entree == 'difficile': motordi = random.choice(listemotdifficile)
    motADeviner = []
    for i in range(len(motordi)):
        motADeviner.append("_")
    print(motADeviner)
    lettrejoueur = []
    lettreSaisie = []

    # essai
    nberreur = 0
    while nberreur < 6 and continuer != False :
        lettrejoueur = input("choisis une lettre")
        for l in range(len(motordi)) :
            if len(lettrejoueur) > 1:
                if lettrejoueur == motordi :
                    print("felicitation,vous avez gagné")
                    if trouve == True :
                        break
            if lettrejoueur == motordi[l]:
                print("Félicitation !! Vous y êtes presque")
                motADeviner[l] = lettrejoueur
                print(motADeviner)
                if lettrejoueur == motordi :
                    print("felicitation,vous avez gagné")
                    if trouve == True :
                        break
        if lettrejoueur not in motordi:
            nberreur = nberreur + 1
            print("Attention!! Vous venez d'utiliser", nberreur, "des 6 tentatives")
            if nberreur == 6:
                print("Vous avez perdu :( ")
            lettreSaisie.append(lettrejoueur)
            print(lettreSaisie)

    print("Voulez-vous continuer ? oui ou non")
    entree = None
    while entree is None:
        entree = input('>')
        if trouve ==True :
            if entree not in ('oui', 'non'):
                entree = None
    if entree == 'non': continuer = False
    print("fin du jeu")


-------------------------------------

Voila, merci d'avance pour votre aide :))
bonne soirée
Cordialement

Configuration: Windows / Chrome 77.0.3865.90

3 réponses

  1. jee pee Messages postés 31980 Date d'inscription   Statut Modérateur Dernière intervention   10 015
     
    Bonjour,

    D'abord voir pour la mise en forme des sources, au dessus de la zone d'édition de tes messages, il y a des icônes pour l'enrichissement du texte. Celle qui a cet aspect
    <> ▼
    permet d'appliquer au code, suivant une liste de valeurs, le format correspondant à sa nature (html, Php, C, Python, Shell, ...). Un petit tuto là : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

    Ce qui empèche ton code de tourner correctement c'est que motordi est une chaine "chat" et que motADeviner est un tableau de caractère ['c','h','a','t'], tu ne peux donc pas les comparer, il faut transformer motordi.

    En 46 il faudrait remplacer if lettrejoueur == motordi: par if motADeviner == list(motordi):

    Après regarde la gestion de Continuer et Trouve et leur emplacement, puis Trouve doit démarrer à False et quand le mot est trouvé passer à True, enfin observe comment controler les 2 saisies en entrée par rapport aux réponses attendues avec le while. Ce code n'est pas parfait, mais il fonctionne mieux :

    # -*- coding: utf-8 -*-
    import random
    
    continuer = True
    while continuer:
        print("quelles listes voulez-vous? facile, normal ou difficile?")
        entree = None
        while entree not in ('facile', 'normal', 'difficile'):
            entree = input('> ')
    
        # creerliste de mots
        listemot = ['bonjour', 'soleil', 'beurre', 'ordinateur', 'chocolat', 'animaux', 'batiment']
        listemotfacile = ['chat', 'chien', 'coq', 'tasse', 'pendu', 'fleur']
        listemotdifficile = ['teledetection', 'stratification', 'dictionnaire', 'radiateur']
    
        # print (listemot)
    
        # choix au hazard
        if entree == 'facile': motordi = random.choice(listemotfacile)
        if entree == 'normal': motordi = random.choice(listemot)
        if entree == 'difficile': motordi = random.choice(listemotdifficile)
        motADeviner = []
        for i in range(len(motordi)):
            motADeviner.append("_")
        print(motADeviner)
        lettreSaisie = []
    
        # essai
        nberreur = 0
        trouve= False
        while nberreur < 6 and trouve != True :
            lettrejoueur = input("choisir une lettre ")
            for l in range(len(motordi)) :
                if len(lettrejoueur) > 1:
                    if lettrejoueur == motordi :
                        print("felicitation,vous avez gagné")
                        trouve = True
                        break
                if lettrejoueur == motordi[l]:
                    motADeviner[l] = lettrejoueur
                    print(motADeviner)
                    if motADeviner == list(motordi) :
                        print("felicitation,vous avez gagné")
                        trouve = True
                        break
                    print("Félicitation !! Vous y êtes presque")
    
            if lettrejoueur not in motordi:
                nberreur = nberreur + 1
                print("Attention!! Vous venez d'utiliser", nberreur, "des 6 tentatives")
                if nberreur == 6:
                    print("Vous avez perdu :( ")
                lettreSaisie.append(lettrejoueur)
                print(lettreSaisie)
    
        print("Voulez-vous continuer ? oui ou non")
        entree = None
        while entree not in ('oui', 'non'):
            entree = input('> ')
        if entree == 'non': continuer = False
    print("fin du jeu")


    1
  2. illana
     
    bonjour,
    Merci beaucoup !!
    autre petite question : savez vous comment proposer un indices contre une vie en moins ?

    merci pour votre aide ^^
    0
    1. mamiemando Messages postés 33174 Date d'inscription   Statut Modérateur Dernière intervention   7 944
       
      Il faudrait définir plus précisément ce que tu appelles un indice et sous quelles conditions le joueur peut en demander un.
      0
  3. illana
     
    Ah oui désolée :(

    par exemple si le joueur ne trouve pas le mot à trouver, il peut écrire "indice"
    du coup une lettres s'afficheras dans le mot à trouver. ( et en contre partie il perd une vie)

    merci de votre réponse^^
    0
    1. jee pee Messages postés 31980 Date d'inscription   Statut Modérateur Dernière intervention   10 015
       
      il semble facile de rajouter après la ligne 32 un bloc
      si lettrejoueur = "indice", boucle sur motordi pour trouver un "_", affectation de la lettre depuis motordi, affichage, incrémentation de nberreur
      0