Pendu python:

Résolu/Fermé
Acnologiaf Messages postés 11 Date d'inscription samedi 21 janvier 2023 Statut Membre Dernière intervention 30 octobre 2023 - Modifié le 30 oct. 2023 à 02:52
Acnologiaf Messages postés 11 Date d'inscription samedi 21 janvier 2023 Statut Membre Dernière intervention 30 octobre 2023 - 30 oct. 2023 à 18:27

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 33381 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 26 novembre 2024 7 802
Modifié le 30 oct. 2023 à 03:05

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 11 Date d'inscription samedi 21 janvier 2023 Statut Membre Dernière intervention 30 octobre 2023 2
30 oct. 2023 à 18:27

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
28 oct. 2023 à 13:15

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 11 Date d'inscription samedi 21 janvier 2023 Statut Membre Dernière intervention 30 octobre 2023 2
29 oct. 2023 à 21:11

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