Menu

Aide pour finir un Pendu svp :/ [Résolu]

Messages postés
6
Date d'inscription
dimanche 23 décembre 2018
Dernière intervention
16 janvier 2019
-
Bonjour,

J'ai presque fini de faire un Pendu, je suis débutant dans la programmation sur Python 3.7.2 et je me suis donné un petit défi qui est de reproduire un pendu. Je suis bloquer sur mon programme, j'aimerais que quelqu'un puisse m'aider à terminer mon pendu, mon problème reste de dire a mon programme de ce terminer lorsque mon mot a été trouver ou si le nombre d’essai est terminé.


while True:
            mots= ["armoire","boucle","buisson", "bureau", "chaise", "carton", "couteau", "fichier", "garage","glace","journal","kiwi","lampe","liste","montagne","remise","sandale","taxi","vampire","volant",]
            from random import*
            motmystere=""
            mot=choice(mots)
            print (mot)

            motmystere=[]
            for lettre in mot:
                motmystere.append('*')

            print(" ".join(motmystere))


            compteur=10

            while compteur>0:
                lettreUser=input('Rentrer une lettre :')
                position=0
                for analyslettre in mot:            
                    if lettreUser==analyslettre:
                        print ('cette lettre est correcte')
                        motmystere[position]=lettreUser
                 
                position+=1
                print("".join(motmystere))
                       
                print()

                if lettreUser not in mot:
                    compteur-=1       
                else:
                    compteur==compteur
                print ('Il vous reste',compteur,'essais')

                if compteur==0:
                    print ('Vous avez perdu')
Afficher la suite 

Votre réponse

5 réponses

Messages postés
7256
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 janvier 2019
431
0
Merci
bonjour, peux-tu utiliser la coloration syntaxique pour partager ton code?
Commenter la réponse de yg_be
Messages postés
6
Date d'inscription
dimanche 23 décembre 2018
Dernière intervention
16 janvier 2019
0
Merci
Bonjour, voici est ce que c'est bon pour toi ^^ ?


while True: 
mots= ["armoire","boucle","buisson", "bureau", "chaise", "carton", "couteau", "fichier", "garage","glace","journal","kiwi","lampe","liste","montagne","remise","sandale","taxi","vampire","volant",] 
from random import* 
motmystere="" 
mot=choice(mots) 
print (mot) 

motmystere=[] 
for lettre in mot: 
motmystere.append('*') 

print(" ".join(motmystere)) 


compteur=10 

while compteur>0: 
lettreUser=input('Rentrer une lettre :') 
position=0 
for analyslettre in mot: 
if lettreUser==analyslettre: 
print ('cette lettre est correcte') 
motmystere[position]=lettreUser 

position+=1 
print("".join(motmystere)) 

print() 

if lettreUser not in mot: 
compteur-=1 
else: 
compteur==compteur 
print ('Il vous reste',compteur,'essais') 

if compteur==0: 
print ('Vous avez perdu')
Commenter la réponse de MajorAstral
Messages postés
6
Date d'inscription
dimanche 23 décembre 2018
Dernière intervention
16 janvier 2019
0
Merci
while True:
            mots= ["armoire","boucle","buisson", "bureau", "chaise", "carton", "couteau", "fichier", "garage","glace","journal","kiwi","lampe","liste","montagne","remise","sandale","taxi","vampire","volant",]
            from random import*
            motmystere=""
            mot=choice(mots)
            print (mot)

            motmystere=[]
            for lettre in mot:
                motmystere.append('*')

            print(" ".join(motmystere))


            compteur=10

            while compteur>0:
                lettreUser=input('Rentrer une lettre :')
                position=0
                for analyslettre in mot:            
                    if lettreUser==analyslettre:
                        motmystere[position]=lettreUser
                        print("Correct")
                    position+=1
                print("".join(motmystere))
                       
                print()

                if lettreUser not in mot:
                    compteur-=1       
                else:
                    compteur==compteur
                print ('Il vous reste',compteur,'essais')

                if compteur==0:
                    print ('Vous avez perdu')
yg_be
Messages postés
7256
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 janvier 2019
431 -
tu écris que ton problème reste de dire a ton programme de ce terminer lorsque ton mot a été trouver ou si le nombre d’essai est terminé.
comment se comporte ton programme?
Bonjour.

Ce qu'il te faut est l'instruction break de python.

Voici un peu comment devrait se présenter ton programme.

# Les imports doivent se situer en début de fichier
# Et inutile de polluer l'espace global du script avec le import *
# Il est préférable de garder le module dans son propre espace de nom
import random

# La liste des mots doit se situer hors de ta boucle while, il n'y a aucun intérêt
# de la déclarer à multiple reprises
mots= ["armoire","boucle","buisson", "bureau", "chaise", "carton", "couteau", "fichier", "garage","glace","journal","kiwi","lampe","liste","montagne","remise","sandale","taxi","vampire","volant",]

while True:
    # On déclare le mot à deviner comme une liste de caractères, afin de faciliter
    # la comparaison
    mot = list(random.choice(mots))

    # En python, on peut muliplier un caractère
    motmystere = ['*'] * len(mot)

    print("".join(motmystere))
    compteur = 10
    
    while compteur > 0:
        lettreUser = input('Entrez une lettre :')
        # Sert à savoir si la lettre saisie se situe dans le mot
        lettreDansMot = False
        
        # enumerate permet d'obtenir les indices lors de l'itération
        for i, lettre in enumerate(mot):            
            if lettre == lettreUser:
                motmystere[i] = lettreUser
                lettreDansMot = True
        
        # On peut passer plusieurs paramètres à print dont le \n (saut de ligne)
        print("".join(motmystere), '\n')
        
        # Si le mot mystère est égal au mot à deviner
        # On interrompt la boucle
        if mot == motmystere:
            print('Bravo !')
            break
        
        # Si la lettre est présente dans le mot
        if lettreDansMot:
            print("Correct !")
        else:
            compteur -= 1
        # Le compteur vaut 0, on interrompt la boucle
        if compteur == 0:
            print ('Vous avez perdu...')
            break
            
        print ('Il vous reste', compteur, 'essais')
    
    autre = input('\nUne autre partie ?\nTapez 1 pour oui, 0 pour non: ')
    # Si choix diffréent de 1, on onterrompt la boucle principale
    if autre != '1':
        break


Bon, ça te mâche un peu le travail, je te propose donc de faire une amélioration de façon à montrer chaque fois les lettres déjà saisies par le joueur, et refuser la saisie si la lettre à déjà été jouée.

Bonne continuation.
Merci pour ce programme je connaissais pas la fonction break c'est bien de me l'avoir fait montrer. Je vais essayer de l'améliorer.
Commenter la réponse de MajorAstral
0
Merci
Comment je peu faire pour mettre un score a la fin de la partie et cumuler ce score avec la partie suivante?
svp
yg_be
Messages postés
7256
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 janvier 2019
431 -
comment ferais-tu?
et bien j'ai rajouter avant le while une variable score=0 et ensuite j'ai mis dans apres le if mot==motmystere; un score=compteur+score et ensuite un print(score)
yg_be
Messages postés
7256
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 janvier 2019
431 > MajorAstral -
et tout cela fonctionne bien?
Non du coup ça fonctionne pas, l'erreur viens du break du if mot==motmystere psk sa stop la boucle a chaque fois et sa enregistre pas mon score d'avant
yg_be
Messages postés
7256
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 janvier 2019
431 > MajorAstral -
penses-tu avoir ajouté le nouveau code au bon endroit?
c'est peut-être le moment de nous montrer à nouveau ton programme.
Commenter la réponse de MajorAstral
0
Merci
  mots= ["armoire","boucle","buisson", "bureau", "chaise", "carton", "couteau", "fichier", "garage","glace","journal","kiwi","lampe","liste","montagne","remise","sandale","taxi","vampire","volant",]

while True:
            from random import*
            mot=list(choice(mots))
            motmystere =['*']*len(mot)
            print(" ".join(motmystere))
            score=0
            compteur=10

            while compteur>0:
                lettreUser=input('Rentrer une lettre :')
                lettreDansMot=False
                position=0
                for analyslettre in mot:           
                    if analyslettre==lettreUser:
                        motmystere[position]=lettreUser
                        lettreDansMot=True
                    position+=1
                print("".join(motmystere),'\n')

                if mot== motmystere:
                    print('Bravo !')
                    score=compteur+score
                    print('Vous avez',score,'points')
                    break
                
                if lettreDansMot:
                    print("Correct !")      
                else:
                    compteur-=1
                    print("Incorrect")
                    
                print ('Il vous reste',compteur,'essais')

                if compteur==0:
                    print('Le mot est:',mot)
                    print ('Vous avez perdu')
                    break

            fin=input('\nUne autre partie ?\nTaper 1 pour oui, 0 pour non: ')
            if fin !='1':
                break
Et bien je veux cumuler mais faut bien commencer par 0 au départ
yg_be
Messages postés
7256
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 janvier 2019
431 > MajorAstral -
au départ de quoi?
quand ton programme met-il le score à zéro?
Bonsoir.

Si tu veux cumuler les scores de plusieurs parties, alors tu dois déclarer ta variable score hors des boucles.
Si tu as besoin de garder un score local à une partie, et un score général à ton jeu, alors déclare 2 variables distinctes.

Autres commentaires:
- Il ne faut pas importer un module dans une boucle.
- Il est inutile de convertir une variable en list qui est déjà de type list.
Ah oui sa fonctionne c'est vrai que j'ai fais une erreur de débutant ^^ merci
yg_be
Messages postés
7256
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 janvier 2019
431 > MajorAstral -
bravo! peux-tu alors marquer comme résolu, via la roue dentée à droite du titre?
Commenter la réponse de MajorAstral