Probleme de boucle python (jeux pendu)

illana -  
jee pee Messages postés 31902 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 31902 Date d'inscription   Statut Modérateur Dernière intervention   9 985
     
    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 33228 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 31902 Date d'inscription   Statut Modérateur Dernière intervention   9 985
       
      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