Pendu python:
RésoluAcnologiaf 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
- Pendu python:
- Jeu du pendu - Télécharger - Vie quotidienne
- Citizen code python avis - Accueil - Outils
- Mot secret python pix ✓ - Forum Python
- Python est introuvable. exúcutez sans argument pour procúder ó l ✓ - Forum Python
- Python par la pratique : 101 exercices corrigés pdf - Forum Python
3 réponses
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
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)
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")