Pendu python:

Résolu
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

A voir également:

3 réponses

mamiemando Messages postés 33093 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 mai 2024 7 751
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
Whismeril Messages postés 19035 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 6 mai 2024 931
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