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