Probleme de boucle python (jeux pendu)

Fermé
illana - Modifié le 31 mars 2022 à 01:02
jee pee Messages postés 40431 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 7 novembre 2024 - 2 avril 2022 à 20:14
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
A voir également:

3 réponses

jee pee Messages postés 40431 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 7 novembre 2024 9 416
Modifié le 31 mars 2022 à 01:35
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
bonjour,
Merci beaucoup !!
autre petite question : savez vous comment proposer un indices contre une vie en moins ?

merci pour votre aide ^^
0
mamiemando Messages postés 33346 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 8 novembre 2024 7 803
1 avril 2022 à 19:44
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
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
jee pee Messages postés 40431 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 7 novembre 2024 9 416
Modifié le 2 avril 2022 à 20:14
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