Probleme de boucle python (jeux pendu)
illana
-
jee pee Messages postés 31902 Date d'inscription Statut Modérateur Dernière intervention -
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 :
(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 :
------------------------------------------------
-------------------------------------
Voila, merci d'avance pour votre aide :))
bonne soirée
Cordialement
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
-
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")
-
bonjour,
Merci beaucoup !!
autre petite question : savez vous comment proposer un indices contre une vie en moins ?
merci pour votre aide ^^ -
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^^