Pendu python:

Résolu
Acnologiaf Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   -  
Acnologiaf Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   -

Bonjour,je suis un débutant en python et j'essaie de faire un pendu

mot: str = input("Entrez votre mot:")
guess: str = input("Trouvez le mot:")

for i in mot:
    for e in guess:
        if i == e:
            print(e)
        else:
            print("x")

J'aimerais que lorsque je rentre une lettre et qu'elle soit bonne, elle soit réecrite et que le nombre de lettres restantes soit représentées par des x pour mot = "mot"

  • si guess == "m"
mxx
  • si guess == "o"
xox
  • si guess == "t"
xxt
  • MAIS lorsque guess = mt, j'obtiens
mxxxxt

... au lieu de : 

mxt

Je ne comprends pas pourquoi. Pourriez-vous m'aider s'il vous plaît ?

Merci d'avance
Windows / Chrome 118.0.0.0

3 réponses

mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 

Bonjour,

Si tu ne sais pas utiliser le débogueur, le plus simple est sans doute de mettre des print pour voir l'état de tes variables à chaque tour de boucle.

Mais pour faire court, l'erreur vient d'une mauvaise compréhension de ce que font tes boucles. Si guess = "mt", sela signifie que ta 2e boucle for (ligne 6) sera exécutée un coup pour "m" et un autre coup pour "t", et donc chaque caractère de ton mot sera traité 2 fois (une fois comparé avec "m", une fois comparé avec "t").

Dans ton cas, il faut donc plutôt vérifier dans quelle mesure la lettre courante de mot est ou non dans guess. En python, il y a un opérateur précisément fait pour ce test : in.

En pseudo code :

Pour chaque lettre de mot
    Si cette lettre est dans guess:
         Afficher lettre
    Sinon
         Afficher x

Si tu ne veux pas utiliser cet opérateur dans un test, c'est plus compliqué, mais ça reste faisable (et c'est ce qu'on ferait dans un autre langage de programmation que python). Le test "lettre est dans guess" devient :

(Chercher si lettre est dans guess)
trouvé = FAUX
Pour chaque caractère de guess:
    Si lettre == caractère:
        trouvé = VRAI
        (inutile de continuer à chercher)
        (on peut interrompre avec break)
Si trouvé == VRAI:
    Traiter le cas "lettre est dans guess"
Sinon:
    Traiter le cas "lettre n'est pas dans guess"

Il ne reste alors plus qu'à réunir ces deux bouts de code et à les traduire en python pour résoudre ton exercice. 

Bonne chance

1
Acnologiaf Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   1
 

Merci pour toutes vos réponses, finalement après avoir réfléchi a vos conseils , je m'en suis sorti avec le script suivant :

from time import sleep

mot=""
guess="f"
coups= 1

mot: str = input("Entrez votre mot :")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
print("")
guess: str = input("Trouvez le mot:")
while mot != guess:
    for i in mot:
        if i in guess:
            print(i)
        else:
            print("x")
    guess: str = input("Trouvez le mot:")
    coups = coups + 1
print("Bravo!Vous avez trouvé le mot en " + str(coups) + " coup(s)")
sleep(5)
1
Utilisateur anonyme
 

Bonjour

pour bien coder, il faut savoir débboguer.

Certains IDE permettent d'exécuter du code Python en pas à pas.

Si c'est le cas du tien, fais le et reviens nous expliquer ce que tu as compris de l'exécution de ton code.

Si ton IDE ne le permet pas ou si tu ne sais pas comment faire, teste ce code

mot : str= input("Entrez votre mot :")
guess: str= input("Trouvez le mot:")

for i in mot:
    print("i",i)
    for e in guess:
        print("e",e)
        if i == e:
            print(e)
        else:
            print("x")

0
Acnologiaf Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   1
 

Merci , je ne savais pas que mon IDE avait un débogger, au fait je n'arrive pas a sortir de la deuxieme boucle for et quand bien même je le fais , elle reprend a la première itération

0