Bonjour à tous ! 🙂
Voilà 3 jours que je travaille sur mon deuxième TP (quel casse-tête!) : le jeu du Pendu…
Et je vous avouerais que j’ai fait face à de nombreuses difficultés !

Après avoir bien visualisé mon code, puis commencé la rédaction simplifiée, je me suis lancée dans l’écriture complète du programme.
J’ai réalisé beaucoup d’essais pour réussir à faire fonctionner mon jeu.
Et notamment pour trouver comment :
Afficher le mot sous forme de mot mystère (avec des étoiles)
J’ai d’abord mis le mot sélectionné sous forme de liste en utilisant la recherche dans une chaîne de caractères :
mon_mot = [ lettre for lettre in m]
Ici, la liste – que j’ai nommée « mon_mot » – va être créée en prenant le mot « m » lettre après lettre et en ajoutant chaque caractère comme un objet de la liste.
Sur le même principe, j’ai créé le mot mystère comme étant une liste où chaque objet (lettre) de « mon_mot » est remplacé par une étoile.
mystere = [" * " for lettre in mon_mot]
Bonus : pour un affichage sans les crochets caractéristiques de la liste, j’ai utilisé le paramètre « en liste » lors de l’exécution de « print » :
print(*mystere)
Trouver la lettre demandée dans le mot (surtout quand il y a plusieurs fois la même lettre !)
Ici, j’ai créé une boucle de recherche dans toute la liste pour que toutes les lettres identiques puissent être trouvées.
J’ai d’abord demandé de compter le nombre de lettres identiques dans le mot :
compte_lettre = m.count(choix_lettre)
Puis j’ai mis comme paramètre d’arrêt de la boucle sur ce nombre :
i=0 while i != compte_lettre : rech_lettre = mon_mot.index(choix_lettre) mon_mot[rech_lettre] = "*" mystere[rech_lettre] = choix_lettre i += 1
Arrêter le programme lorsque le mot est trouvé
Ce point fut plus compliqué à démêler, car j’arrivais à finir le mot sans que le programme passe ensuite au calcul des scores…
Dans un premier temps, il faut arrêter la recherche de lettre.
Pour ça, il faut qu’à chaque lettre trouvée la longueur du mot « m » diminue.
Et j’ai mis une condition « if » sur cette longueur qui doit être strictement inférieure à 1 (si c’est à 0, après avoir trouvé toutes les lettres, le programme me demande encore une lettre !) :
long = len(m) compte_lettre = m.count(choix_lettre) if long > 1 : # recherche et remplacement de la lettre - voir au dessus # long = long - compte_lettre
La fin de la condition « if » ainsi créée permet ensuite de sortir du programme en ayant trouvé le mot. Et pour arrêter complètement la boucle, j’ai utilisé la fonction « break » :
else : print("\nBravo, vous avez trouvé le mot mystere : ", m ) break
Casse-tête résolu ! 🙂
J’ai donc sorti un programme permettant de jouer au Pendu, dont voici le code :
# -*-coding:Latin-1 -* # ************* Programme du jeu du Pendu *************** import os import random print("Bienvenue dans le jeu du Pendu ! \n") pseudo = input("Quel est votre nom ? ") #*** joueur score = 0 #*** score nul pour débuter print("\nL'ordinateur va choisir aléatoirement un mot à découvrir.\n\ Vous avez 8 chances pour y arriver ! \n\ C'est parti...") mot_mystere = ["vision", "bateau", "chouette", "bonjour", "amour", "festival"] no_mot = random.randrange(6) # **** recherche aléatoire du mot dans liste données m=mot_mystere[no_mot] long = len(m) print("\nLe mot mystère comporte ", long, " lettres à trouver :") mon_mot = [ lettre for lettre in m] # *** extraire le mot sous forme de liste par lettre mystere = [" * " for lettre in mon_mot] # *** remplace les lettres par une * print(*mystere) print("\nA vous de le trouver ! ") essai = 8 while essai > 0 : choix_lettre = input("\nTapez une lettre : ") choix_lettre = choix_lettre.lower() # *** mettre la mettre en minuscule compte_lettre = m.count(choix_lettre) try : rech_lettre = mon_mot.index(choix_lettre) # *** recherche la lettre dans le mot except ValueError : # *** si la lettre n'est pas dans le mot try : choix_lettre != int(choix_lettre) # *** vérifie que ce n'est pas un nombre except ValueError : print("Cette lettre n'est pas dans le mot mystère") essai = essai -1 print("Il vous reste ", essai, " coups") coup_rest = essai else : print("Etes vous sûr de votre frappe ?") else : if long > 1 : i=0 while i != compte_lettre : # *** si lettre ds mot, remplacer * rech_lettre = mon_mot.index(choix_lettre) mon_mot[rech_lettre] = "*" mystere[rech_lettre] = choix_lettre i += 1 long = long - compte_lettre else : # *** mot entièrement trouvé print("\nBravo, vous avez trouvé le mot mystere : ", m ) break print(*mystere) print("Il vous reste ", essai, " coups") # *** calcul du score score = score + coup_rest if coup_rest == 0 : # *** mention spéciale si le mot n'a pas été trouvé print("\nVous avez perdu ! Le mot mystère était : ", m) print("\n", pseudo, " , votre score est de : ", score, " points") os.system("pause") # met en pause le système Windows
Pour mémoire, voici le lien de l’énoncé : https://openclassrooms.com/fr/courses/235344-apprenez-a-programmer-en-python/232565-tp-realisez-un-bon-vieux-pendu
Je vous vois venir…
Vous allez me dire : » c’est bien beau tout ça, mais tu n’as pas réalisé le TP exactement comme demandé dans le cours ! »
Exact !
Tout simplement parce que je voulais vous proposer un début de solution à ce casse-tête avant de continuer à bosser dessus… Car je dois faire des recherches plus approfondies sur la lecture/écriture dans un fichier !
La suite dans un prochain post ! 😉