Informatique tronc commun TP 14 Le jeu du pendu

Transcription

Informatique tronc commun TP 14 Le jeu du pendu
Informatique tronc commun TP 14
Le jeu du pendu
29 avril 2015
Le jeu du pendu consiste à essayer de découvrir un mot mystère en proposant le moins de
lettres possibles (voire aussi, en strictement moins de lettres qu’une limite fixée). Par convention,
le mot ne comporte pas d’accent et ne comporte que des majuscules.
À chaque tour de jeu, le joueur propose une lettre et son adversaire lui indique alors si la
lettre appartient au mot et, le cas échéant, les positions des occurences de la lettre dans le mot.
Dans la mesure du possible, on justifiera le code demandé par des invariants.
1 Choix du mot mystère : saisie par l’utilisateur
On souhaite dans cette section définir le mot mystère. On propose la première fonction
suivante :
def cree_mot_mystere ( ) :
print ( " E n t r e r ␣ l e ␣mot␣ à␣ c h e r c h e r " )
mot_mystere = input ( " ( en ␣ majuscule , ␣ s a n s ␣ a c c e n t s ␣SVP) ␣ : ␣" )
print ( "Le␣mot␣à ␣ c h e r c h e r ␣ e s t ␣ {} " . format ( mot_mystere ) )
return ( mot_mystere )
1. Tester la fonction proposée.
2. Modifier la définition précédente et utiliser la méthode upper pour s’affranchir de la
contrainte des majuscules. Tester alors la fonction.
2 Choix du mot mystère : choix aléatoire
La méthode précédente est intéressante lorsque l’on joue à deux. On souhaite définir maintenant un mot mystère par le choix d’un mot pris de façon aléatoire dans le fichier fourni
dictionnaire_pendu.txt contenant un mot par ligne.
3. Définir une fonction file2list qui renvoie la liste des lignes contenus dans le fichier.
4. Afficher les 5 premiers mots de la liste, ainsi que leur longueur. Quel est le dernier caractère
de chaque mot ? Modifier la fonction précédente pour supprimer ce dernier caractère.
5. Utiliser la fonction de bibliothèque random.randrange et définir une fonction permettant
de choisir aléatoirement un mot parmi ceux du fichier dictionnaire_pendu.txt fourni.
1
3 Découvrir le mot mystère
Dans cette partie, vous avez à faire preuve de beaucoup plus d’initiative personnelle quant
au choix des structures de données et à l’algorithme mis en œuvre.
6. Écrire un programme permettant de jouer au pendu, demandant à l’utilisateur la lettre
qu’il choisit à chaque tour et indiquant, lorsque le mot a été découvert, le nombre de
lettres qui ont été utilisées. Le nombre d’essais est dans ce cas illimité.
4 Pour aller plus loin
7. On souhaite aussi s’affranchir de la contrainte des accents, et permettre la saisie de mots
quelconques. On s’assurera bien de travailler en Python 3.x pour s’affranchir des problèmes
délicats de caractères unicodes. Compléter la fonction :
def enleve_accents (s):
"""Renvoie une copie de la chaîne <s> sans les accents,
et en majuscules"""
# on commence par copier la chaîne en mettant les caractères en majuscules
[...]
# on remplace les caractères accentués par leurs équivalents non accentués
# Pour cela, on peut créer un dictionnaire
dico = {}
lettres = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
for x in lettres:
dico[x] = x
les_A = ['À', 'Â']
les_E = ['É', 'È', 'Ê', 'Ë']
les_I = ['Î', 'Ï']
les_O = ['Ô', 'Ö']
les_U = ['Ù', 'Û', 'Ü']
for x in les_A:
dico[x] = 'A'
[...]
dico['Æ'] = 'AE'
dico['Œ'] = 'OE'
dico['Ç'] = 'C'
[...]
On pourra relire le TP08 pour avoir quelques renseignements élémentaires sur les dictionnaires. Compléter la fonction précédente, et l’utiliser dans la définition de cree_mot_mystere.
Tester la fonction.
8. Proposer une nouvelle version du jeu, en écrivant une fonction prenant comme argument
le nombre maximum d’essais pour le joueur. On s’assurera qu’il est possible de gagner,
c’est-à-dire que le mot choisi ne comporte pas plus de lettres distinctes que le nombre
d’essais.
2