Consignes pour les projets :
Numérique et sciences informatiques

Projet 2 : Le pendu
Description du projet
Dans ce projet vous allez créer un programme permettant de jouer au jeu du pendu.
Il se joue à deux. L’un pense à un mot, par exemple :
et écrit une suite de tirets à la place des lettres :
L’autre doit deviner ce mot en ne connaissant au départ que sa longueur. Pour s’aider, il peut demander l’existence d’une lettre. A chaque lettre proposée, si celle-ci figure dans ` le mot, les occurrences de la lettre sont écrites à leur place. Par exemple, pour E :
Si la lettre ne figure pas dans le mot, le joueur est pénalisé d’un point. Au bout de sept pénalisations, le joueur est « pendu » à moins qu’il ne trouve le mot avant. En général le jeu est agrémenté d’une sinistre potence dont le malheureux pendu se dessine progressivement à chaque mauvaise proposition.
Cahier des charges
Vous avez à votre disposition un fichier texte contenant une liste de mot (un peu plus de 800 mots)2_pendu_dico.txt [txt] et une fonction Python vous permettant de dessiner le pendu (voir ci-dessous)
def dessinPendu(nb):
tab=[
"""
+-------+
|
|
|
|
|
==============
""",
"""
+-------+
| |
| O
|
|
|
==============
"""
,
"""
+-------+
| |
| O
| |
|
|
==============
""",
"""
+-------+
| |
| O
| -|
|
|
==============
""",
"""
+-------+
| |
| O
| -|-
|
|
==============
""",
"""
+-------+
| |
| O
| -|-
| |
|
==============
""",
"""
+-------+
| |
| O
| -|-
| | |
|
==============
"""
]
return tab[nb]
Pour information les "triples guillemets" """ permettent de délimiter une chaîne de caractères située sur plusieurs lignes (chaîne de caractères multi-lignes).
Déroulement du programme
La machine organise le jeu.
- Le programme sélectionne un mot.
- Le mot s’affiche avec des blancs soulignés à la place des lettres.
- Le programme demande la saisie d’une lettre.
- Le second joueur tape une lettre.
- En cas de succès, le mot s’affiche (avec les lettres trouvées).
- En cas d’échec, le programme indique combien de propositions il reste.
- Le mot s’affiche avec des lettres et des soulignés selon qu’elles aient été découvertes ou non.
- Le programme reprend au point 3 sauf si le joueur a épuisé tous ses coups ou trouvé le mot.
Le code du programme :
Entraînement 1 :
Écrivez la fonction choix_mot()
qui sélectionne un mot à partir du fichier texte
def choix_mot(liste_mots):
""" Fonction qui renvoie un mot du fichier texte source
Paramètre :
liste_mots : de type chaîne de caractère
Retour :
mot_inconnu : un mot du fichier, de type chaîne de caractère"""
Entraînement 2 :
Ecrivez une fonction verifier_saisie()
qui doit vérifier si un caractère est comprise entre "A" et "Z".
Il est possible d'utiliser le code ASCII pour transformer automatiquement les minuscules en majuscules.
def verifier_saisie(caractere):
""" Fonction qui renvoie True si caractere est compris entre "A" et "Z"
Paramètre :
caractere, de type chaîne de caractère
Retour :
Booléen"""
Entraînement 3 :
Écrivez une fonction cacher_mot()
qui présente le mot à trouvé avec des undescores (_).
def cacher_mot(mot):
""" Fonction qui transforme mot_inconnu en une chaîne d'undescore (mot_cache)
Paramètre :
mot, de type chaîne de caractère
Retour :
mot_cache : chaîne de caractère avec des "_" . Cete chaîne à la même longueur que le paramètre mot"""
Entraînement 4 :
Écrivez une fonction verifier_lettre()
qui vérifie la présence ou non de la lettre proposée dans le mot sélectionner.
def verifier_lettre(mot,caractere):
""" Fonction qui renvoie True si caractere est présent dans mot
Paramètre :
caractere, de type chaîne de caractère
mot, de type chaîne de caractère
Retour :
Booléen"""
Entraînement 5 :
Ecrivez une fonction nb_erreur()
qui compte le nombre d’erreurs du joueur.
def nb_erreur(nb_erreur):
""" Fonction qui comptabilise le nombre d'erreurs
Paramètre :
nb_erreur, de type int
Retour :
nb_erreur, de type int"""
Entraînement 6 :
Ecrivez une fonction potence()
qui affiche la potence en fonction des essais.
def potence(nb_erreur):
""" Fonction qui affiche la potence en fonction du nombre d'erreurs
Paramètre :
nb_erreur, de type int
"""
Entraînement 7 :
Ecrivez une fonction lettre()
qui affiche la lettre trouvée à la place de l'unduscore.
def lettre(mot_inconnu,caractère):
""" Fonction qui affiche la lettre trouvée à la place de l'unduscore de mot_inconnu
Paramètre :
caractere, de type chaîne de caractère
mot_inconnu, de type chaîne de caractère
Retour :
mot_inconnu, de type chaîne de caractère"""
Entraînement 8 :
Écrivez une fonction deviner_mot()
qui permet à un joueur de proposer des lettres jusqu’à ce qu’il trouve le mot à deviner ou qu’il ait épuisé ses maxima de propositions.
Entraînement 9 :
Écrivez une fonction score()
qui permmette la gestion des scores (sur un fichier texte).
Le code du programme :
Amélioration 1 :
Afficher graphiquement les lettres déjà utilisé à l'écran.
Amélioration 2 :
Afficher le pendu avec des images à l'écran.