{"id":7693,"date":"2022-06-23T13:40:56","date_gmt":"2022-06-23T11:40:56","guid":{"rendered":"https:\/\/www.mathweb.fr\/euclide\/?p=7693"},"modified":"2022-06-23T13:40:57","modified_gmt":"2022-06-23T11:40:57","slug":"un-boggle-en-python","status":"publish","type":"post","link":"https:\/\/www.mathweb.fr\/euclide\/2022\/06\/23\/un-boggle-en-python\/","title":{"rendered":"Un Boggle en Python"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Comment cr\u00e9er un Boggle en Python ? Le Boggle, c&rsquo;est ce jeu de 16 d\u00e9s sur lesquels sont inscrites des lettres et il faut former le plus de mots possibles avec des lettres qui se suivent.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"450\" height=\"330\" src=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2022\/06\/boggle-python.png\" alt=\"\" class=\"wp-image-7694\" srcset=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2022\/06\/boggle-python.png 450w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2022\/06\/boggle-python-300x220.png 300w\" sizes=\"auto, (max-width: 450px) 100vw, 450px\" \/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.boggle.fr\/img\/regles_exemples.png\" alt=\"Exemples de mots valides au jeu de Boggle\"\/><\/figure>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<!--more-->\n\n\n\n<p class=\"wp-block-paragraph\">Les r\u00e8gles du jeu sont disponibles sur la page <a href=\"https:\/\/www.boggle.fr\/regles.php\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.boggle.fr\/regles.php<\/a>.<\/p>\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter ez-toc-white ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Au menu sur cette page...<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.mathweb.fr\/euclide\/2022\/06\/23\/un-boggle-en-python\/#Boggle_en_Python_preliminaires\" >Boggle en Python: pr\u00e9liminaires<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.mathweb.fr\/euclide\/2022\/06\/23\/un-boggle-en-python\/#Boggle_en_Python_limplementation\" >Boggle en Python: l&rsquo;impl\u00e9mentation<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.mathweb.fr\/euclide\/2022\/06\/23\/un-boggle-en-python\/#Boggle_et_Python_lobjet\" >Boggle et Python: l&rsquo;objet<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.mathweb.fr\/euclide\/2022\/06\/23\/un-boggle-en-python\/#Boggle_et_Python_le_constructeur\" >Boggle et Python:  le constructeur<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.mathweb.fr\/euclide\/2022\/06\/23\/un-boggle-en-python\/#La_methode_%C2%AB_dices_%C2%BB\" >La m\u00e9thode \u00ab\u00a0dices\u00a0\u00bb<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.mathweb.fr\/euclide\/2022\/06\/23\/un-boggle-en-python\/#La_methode_%C2%AB_board_%C2%BB\" >La m\u00e9thode \u00ab\u00a0board\u00a0\u00bb<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.mathweb.fr\/euclide\/2022\/06\/23\/un-boggle-en-python\/#Laffichage_du_plateau\" >L&rsquo;affichage du plateau<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/www.mathweb.fr\/euclide\/2022\/06\/23\/un-boggle-en-python\/#Ameliorations\" >Am\u00e9liorations<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/www.mathweb.fr\/euclide\/2022\/06\/23\/un-boggle-en-python\/#Boggle_et_Python_quand_le_fichier_nexiste_pas\" >Boggle et Python: quand le fichier n&rsquo;existe pas<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/www.mathweb.fr\/euclide\/2022\/06\/23\/un-boggle-en-python\/#Boggle_et_Python_quand_il_manque_une_ligne\" >Boggle et Python: quand il manque une ligne<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/www.mathweb.fr\/euclide\/2022\/06\/23\/un-boggle-en-python\/#Quand_il_manque_une_ou_plusieurs_lettres_dans_au_moins_une_ligne\" >Quand il manque une ou plusieurs lettres dans au moins une ligne<\/a><\/li><\/ul><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Boggle_en_Python_preliminaires\"><\/span>Boggle en Python: pr\u00e9liminaires<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Je ne poss\u00e8de pas ce jeu, donc je ne connais pas les lettres mises sur les diff\u00e9rents d\u00e9s.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Par cons\u00e9quent, je vais cr\u00e9er mes propres d\u00e9s de fa\u00e7on al\u00e9atoire pour chaque partie.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Je voudrais tout de m\u00eame offrir aux joueurs le possibilit\u00e9 de jouer avec les \u00ab\u00a0vrais\u00a0\u00bb d\u00e9s. Je vais donc penser \u00e0 ins\u00e9rer une option pour lire un fichier dans lequel seront mises 16 lignes contenant chacune 6 lettres (plus d&rsquo;explications plus loin).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c0 ce stade, il y a donc deux fa\u00e7ons de jouer \u00e0 mon Boggle: soit on impose les d\u00e9s, soit on laisse la machine les choisir au hasard.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il y a plusieurs fa\u00e7ons de coder. Je vais opter pour la <a href=\"https:\/\/www.mathweb.fr\/euclide\/2019\/09\/06\/les-classes-en-python\/\" target=\"_blank\" rel=\"noreferrer noopener\">POO<\/a>. Les personnes qui lisent mes articles r\u00e9guli\u00e8rement savent que c&rsquo;est une fa\u00e7on de coder que j&rsquo;appr\u00e9cie.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Boggle_en_Python_limplementation\"><\/span>Boggle en Python: l&rsquo;impl\u00e9mentation<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Boggle_et_Python_lobjet\"><\/span>Boggle et Python: l&rsquo;objet<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Comme je souhaite coder en POO, je vais cr\u00e9er un objet \u00ab\u00a0Boggle\u00a0\u00bb, donc une class du m\u00eame nom.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le constructeur devra d\u00e9finir deux choses:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>les 16 d\u00e9s de la partie<\/li><li>le plateau (form\u00e9 des 16 d\u00e9s)<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">L&rsquo;objet devra poss\u00e9der une option \u00ab\u00a0fichier\u00a0\u00bb si toutefois on souhaite imposer les d\u00e9s du jeu.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Boggle_et_Python_le_constructeur\"><\/span>Boggle et Python:  le constructeur<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Pour simplifier les choses, je vais faire appel \u00e0 deux m\u00e9thodes pour le constructeur: la m\u00e9thode \u00ab\u00a0dices\u00a0\u00bb (qui va d\u00e9finir les 16 d\u00e9s) et la m\u00e9thode \u00ab\u00a0board\u00a0\u00bb (qui d\u00e9finira le plateau du jeu).<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"dracula\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class Boggle():\n    def __init__(self,fichier = None):\n        self.dices(fichier)\n        self.board()<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ainsi,<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>>>> B = Boggle()<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">d\u00e9finit un Boggle avec des d\u00e9s al\u00e9atoirement choisis et<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>>>> B = Boggle('des.txt')<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">d\u00e9finit un Boggle dont les d\u00e9s sont stock\u00e9s dans le fichier \u00ab\u00a0des.txt\u00a0\u00bb sous la forme de 16 cha\u00eenes de caract\u00e8res form\u00e9es de 6 lettres majuscules, par exemple:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>AJYHFT\nHRJNVB\nKIKFGV\nOPKJHN\nKIJHKG\nNBVLMI\nUJUGHB\nNJHURN\nNHBCWM\nLOLKJH\nNJBNHT\nPLOKJG\nHVNGBV\nKJIHKY\nNBWQPM\nLNYTHG<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"La_methode_%C2%AB_dices_%C2%BB\"><\/span>La m\u00e9thode \u00ab\u00a0dices\u00a0\u00bb<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Cette m\u00e9thode doit lire le fichier mis en option si on souhaite que les d\u00e9s soient impos\u00e9s, et doit choisir au hasard les lettres \u00e0 mettre sur chacun des 16 d\u00e9s dans le cas contraire.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Contrairement \u00e0 mon fichier des.txt pr\u00e9c\u00e9dent, il serait  bon de ne pas mettre deux fois la m\u00eame lettre sur un d\u00e9.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Je vais faire appel au module Python <em>string<\/em> et \u00e0 sa fonction <em>ascii_uppercase<\/em> qui retourne les lettres de l&rsquo;alphabet dans l&rsquo;ordre et en majuscules.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Je vais aussi faire appel au module Python <em>random<\/em> et \u00e0 sa fonction <em>choice<\/em>.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"dracula\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">    def dices(self,fichier):\n        self.des = []\n        if fichier != None:\n            with open(fichier , 'r') as f:\n                for line in f:\n                    self.des.append(list(line.replace('\\n','')))\n                    \n        else:\n            for _ in range(16):\n                self.des.append([choice(ascii_uppercase) for _ in range(6)])<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">la liste <em>self.des<\/em> contiendra 16 listes, chacune d&rsquo;elles repr\u00e9sentant un d\u00e9.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"La_methode_%C2%AB_board_%C2%BB\"><\/span>La m\u00e9thode \u00ab\u00a0board\u00a0\u00bb<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Dans cette m\u00e9thode, il faut que je m\u00e9lange les d\u00e9s. Je vais donc faire appel \u00e0 la m\u00e9thode <em>shuffle<\/em> du module <em>random<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Je vais d&rsquo;abord m\u00e9langer la liste N = [1,2,3,4,5,6,&#8230;,16] et je vais cr\u00e9er une liste <em>self.plateau<\/em> dans laquelle je vais ins\u00e9rer une lettre (au hasard) d&rsquo;un d\u00e9. \u00c0 ce stade, n&rsquo;oublions pas que les d\u00e9s sont d\u00e9j\u00e0 d\u00e9finis. La liste N contiendra le rang du d\u00e9 \u00e0 ins\u00e9rer dans <em>self.plateau<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Par exemple, si N = [5,2,9,&#8230;], je vais d&rsquo;abord consid\u00e9rer le d\u00e9 <em>self.des[5]<\/em>, puis choisir au hasard une lettre de ce d\u00e9. Ensuite, je vais prendre le d\u00e9 s<em>elf.des[2]<\/em>, et je vais choisir une lettre de ce d\u00e9. etc.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ce qui donne:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"dracula\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">    def board(self):\n        N = [i for i in range(16)]\n        shuffle( N ) # ordre des d\u00e9s\n        self.plateau = []\n        n = 0\n        for _ in range(4):\n            line = []\n            for _ in range(4):\n                line.append( choice( self.des[ N[n] ] ) )\n                n += 1\n            self.plateau.append( line )<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Laffichage_du_plateau\"><\/span>L&rsquo;affichage du plateau<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Maintenant, il faut afficher les lettres. Je vais donc d\u00e9finir l&rsquo;affichage de l&rsquo;objet \u00e0 l&rsquo;aide de la m\u00e9thode __str__:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"dracula\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">    def __str__(self):\n        r = ''\n        for line in self.plateau:\n            for col in line:\n                r += f' {col} '\n            r += '\\n'\n            \n        return r<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ainsi, on a :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>>>> B = Boggle()\n>>> print( B )\n A  Q  I  A \n Z  N  V  B \n R  Z  R  Y \n V  J  K  B <\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Ameliorations\"><\/span>Am\u00e9liorations<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Pour \u00e9viter que le fichier (optionnel) contenant les d\u00e9s ne soit pas conforme \u00e0 nos attentes, il faudrait ins\u00e9rer des tests.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Je vais donc tester:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>la pr\u00e9sence du fichier,<\/li><li>la longueur de chaque cha\u00eene de caract\u00e8res (elle doit \u00eatre \u00e9gale \u00e0 6, car il y a 6 faces \u00e0 chaque d\u00e9s),<\/li><li>la pr\u00e9sence de 16 lignes (car il y a 16 d\u00e9s).<\/li><\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"dracula\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from string import ascii_uppercase\nfrom random import choice, shuffle\n\n\nclass Boggle():\n    def __init__(self,fichier = None):\n        self.errors = []\n        self.dices(fichier)\n        self.board()\n        \n    \n    def dices(self,fichier):\n        self.des = []\n        if fichier != None:\n            try:\n                with open(fichier , 'r') as f:\n                    for line in f:\n                        if len( list(line.replace('\\n','')) ) == 6:\n                            self.des.append(list(line.replace('\\n','')))\n                        else:\n                            self.errors.append('Erreur de dimension sur la ligne :' + line + 'Chaque ligne doit \u00eatre de la forme : ABCDEF.')\n            except:\n                self.errors.append('Fichier \u00ab ' + fichier + ' \u00bb manquant.')\n            if len(self.des) != 16 and len(self.errors ) == 0:\n                self.errors.append('Il n\\'y a pas 16 d\u00e9s.\\nVeuillez v\u00e9rifier que le fichier contient bien 16 lignes.')\n                \n            if len( self.errors ) != 0:\n                for e in self.errors:\n                    print(e)\n        else:\n            for _ in range(16):\n                self.des.append([choice(ascii_uppercase) for _ in range(6)])\n                \n\n    def board(self):\n        if len(self.errors) == 0:\n            N = [i for i in range(16)]\n            shuffle( N ) # ordre des d\u00e9s\n            self.plateau = []\n            n = 0\n            for _ in range(4):\n                line = []\n                for _ in range(4):\n                    line.append( choice( self.des[ N[n] ] ) )\n                    n += 1\n                self.plateau.append( line )\n    \n                \n    def __str__(self):\n        if len(self.errors) == 0:\n            r = ''\n            for line in self.plateau:\n                for col in line:\n                    r += f' {col} '\n                r += '\\n'\n                \n            return r\n        else:\n            return '\\033[91mPas de plateau.'<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ce qui donne par exemple:<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Boggle_et_Python_quand_le_fichier_nexiste_pas\"><\/span>Boggle et Python: quand le fichier n&rsquo;existe pas<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>>>> B = Boggle('des.txt')\n>>> print( B )\nFichier \u00ab des.txt \u00bb manquant.\nPas de plateau.<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Boggle_et_Python_quand_il_manque_une_ligne\"><\/span>Boggle et Python: quand il manque une ligne<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>>>> B = Boggle('des.txt')\n>>> print( B )\nIl n'y a pas 16 d\u00e9s.\nVeuillez v\u00e9rifier que le fichier contient bien 16 lignes.\nPas de plateau.<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Quand_il_manque_une_ou_plusieurs_lettres_dans_au_moins_une_ligne\"><\/span>Quand il manque une ou plusieurs lettres dans au moins une ligne<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>>>> B = Boggle('des.txt')\n>>> print( B )\nErreur de dimension sur la ligne :KIKFG\nChaque ligne doit \u00eatre de la forme : ABCDEF.\nErreur de dimension sur la ligne :NHBCW\nChaque ligne doit \u00eatre de la forme : ABCDEF.\nErreur de dimension sur la ligne :KJIH\nChaque ligne doit \u00eatre de la forme : ABCDEF.\nPas de plateau.<\/code><\/pre>\n\n\n<div class=\"wp-block-image is-style-default\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"426\" height=\"155\" src=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2022\/06\/image-3.png\" alt=\"boggle python\" class=\"wp-image-7696\" srcset=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2022\/06\/image-3.png 426w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2022\/06\/image-3-300x109.png 300w\" sizes=\"auto, (max-width: 426px) 100vw, 426px\" \/><\/figure>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Comment cr\u00e9er un Boggle en Python ? Le Boggle, c&rsquo;est ce jeu de 16 d\u00e9s sur lesquels sont inscrites des lettres et il faut former le plus de mots possibles avec des lettres qui se suivent.<\/p>\n","protected":false},"author":1,"featured_media":7697,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[350,140,101],"class_list":["post-7693","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-python","tag-boggle","tag-poo","tag-python"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Un Boggle en Python - Mathweb.fr<\/title>\n<meta name=\"description\" content=\"Comment cr\u00e9er un Boggle en Python ? Nous allons voir pas \u00e0 pas une fa\u00e7on de faire, qui ne colle pas exactement au vrai jeu, mais bon...\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.mathweb.fr\/euclide\/2022\/06\/23\/un-boggle-en-python\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Un Boggle en Python - Mathweb.fr\" \/>\n<meta property=\"og:description\" content=\"Comment cr\u00e9er un Boggle en Python ? Nous allons voir pas \u00e0 pas une fa\u00e7on de faire, qui ne colle pas exactement au vrai jeu, mais bon...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mathweb.fr\/euclide\/2022\/06\/23\/un-boggle-en-python\/\" \/>\n<meta property=\"og:site_name\" content=\"Mathweb.fr\" \/>\n<meta property=\"article:published_time\" content=\"2022-06-23T11:40:56+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-06-23T11:40:57+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2022\/06\/head-articles-python-boggle.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"740\" \/>\n\t<meta property=\"og:image:height\" content=\"198\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"St\u00e9phane Pasquet\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"St\u00e9phane Pasquet\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2022\\\/06\\\/23\\\/un-boggle-en-python\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2022\\\/06\\\/23\\\/un-boggle-en-python\\\/\"},\"author\":{\"name\":\"St\u00e9phane Pasquet\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#\\\/schema\\\/person\\\/e4d3bb07968238378f0d5052a70dcd69\"},\"headline\":\"Un Boggle en Python\",\"datePublished\":\"2022-06-23T11:40:56+00:00\",\"dateModified\":\"2022-06-23T11:40:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2022\\\/06\\\/23\\\/un-boggle-en-python\\\/\"},\"wordCount\":741,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#\\\/schema\\\/person\\\/e4d3bb07968238378f0d5052a70dcd69\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2022\\\/06\\\/23\\\/un-boggle-en-python\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/head-articles-python-boggle.jpg\",\"keywords\":[\"Boggle\",\"poo\",\"python\"],\"articleSection\":[\"Python\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2022\\\/06\\\/23\\\/un-boggle-en-python\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2022\\\/06\\\/23\\\/un-boggle-en-python\\\/\",\"url\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2022\\\/06\\\/23\\\/un-boggle-en-python\\\/\",\"name\":\"Un Boggle en Python - Mathweb.fr\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2022\\\/06\\\/23\\\/un-boggle-en-python\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2022\\\/06\\\/23\\\/un-boggle-en-python\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/head-articles-python-boggle.jpg\",\"datePublished\":\"2022-06-23T11:40:56+00:00\",\"dateModified\":\"2022-06-23T11:40:57+00:00\",\"description\":\"Comment cr\u00e9er un Boggle en Python ? Nous allons voir pas \u00e0 pas une fa\u00e7on de faire, qui ne colle pas exactement au vrai jeu, mais bon...\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2022\\\/06\\\/23\\\/un-boggle-en-python\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2022\\\/06\\\/23\\\/un-boggle-en-python\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2022\\\/06\\\/23\\\/un-boggle-en-python\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/head-articles-python-boggle.jpg\",\"contentUrl\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/head-articles-python-boggle.jpg\",\"width\":740,\"height\":198,\"caption\":\"Boggle Python\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2022\\\/06\\\/23\\\/un-boggle-en-python\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Un Boggle en Python\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#website\",\"url\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/\",\"name\":\"Mathweb.fr\",\"description\":\"Math\u00e9matiques, LaTeX et Python\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#\\\/schema\\\/person\\\/e4d3bb07968238378f0d5052a70dcd69\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#\\\/schema\\\/person\\\/e4d3bb07968238378f0d5052a70dcd69\",\"name\":\"St\u00e9phane Pasquet\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-logo-mathweb.webp\",\"url\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-logo-mathweb.webp\",\"contentUrl\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-logo-mathweb.webp\",\"width\":74,\"height\":77,\"caption\":\"St\u00e9phane Pasquet\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-logo-mathweb.webp\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Un Boggle en Python - Mathweb.fr","description":"Comment cr\u00e9er un Boggle en Python ? Nous allons voir pas \u00e0 pas une fa\u00e7on de faire, qui ne colle pas exactement au vrai jeu, mais bon...","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.mathweb.fr\/euclide\/2022\/06\/23\/un-boggle-en-python\/","og_locale":"fr_FR","og_type":"article","og_title":"Un Boggle en Python - Mathweb.fr","og_description":"Comment cr\u00e9er un Boggle en Python ? Nous allons voir pas \u00e0 pas une fa\u00e7on de faire, qui ne colle pas exactement au vrai jeu, mais bon...","og_url":"https:\/\/www.mathweb.fr\/euclide\/2022\/06\/23\/un-boggle-en-python\/","og_site_name":"Mathweb.fr","article_published_time":"2022-06-23T11:40:56+00:00","article_modified_time":"2022-06-23T11:40:57+00:00","og_image":[{"width":740,"height":198,"url":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2022\/06\/head-articles-python-boggle.jpg","type":"image\/jpeg"}],"author":"St\u00e9phane Pasquet","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"St\u00e9phane Pasquet","Dur\u00e9e de lecture estim\u00e9e":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.mathweb.fr\/euclide\/2022\/06\/23\/un-boggle-en-python\/#article","isPartOf":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2022\/06\/23\/un-boggle-en-python\/"},"author":{"name":"St\u00e9phane Pasquet","@id":"https:\/\/www.mathweb.fr\/euclide\/#\/schema\/person\/e4d3bb07968238378f0d5052a70dcd69"},"headline":"Un Boggle en Python","datePublished":"2022-06-23T11:40:56+00:00","dateModified":"2022-06-23T11:40:57+00:00","mainEntityOfPage":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2022\/06\/23\/un-boggle-en-python\/"},"wordCount":741,"commentCount":0,"publisher":{"@id":"https:\/\/www.mathweb.fr\/euclide\/#\/schema\/person\/e4d3bb07968238378f0d5052a70dcd69"},"image":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2022\/06\/23\/un-boggle-en-python\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2022\/06\/head-articles-python-boggle.jpg","keywords":["Boggle","poo","python"],"articleSection":["Python"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.mathweb.fr\/euclide\/2022\/06\/23\/un-boggle-en-python\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.mathweb.fr\/euclide\/2022\/06\/23\/un-boggle-en-python\/","url":"https:\/\/www.mathweb.fr\/euclide\/2022\/06\/23\/un-boggle-en-python\/","name":"Un Boggle en Python - Mathweb.fr","isPartOf":{"@id":"https:\/\/www.mathweb.fr\/euclide\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2022\/06\/23\/un-boggle-en-python\/#primaryimage"},"image":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2022\/06\/23\/un-boggle-en-python\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2022\/06\/head-articles-python-boggle.jpg","datePublished":"2022-06-23T11:40:56+00:00","dateModified":"2022-06-23T11:40:57+00:00","description":"Comment cr\u00e9er un Boggle en Python ? Nous allons voir pas \u00e0 pas une fa\u00e7on de faire, qui ne colle pas exactement au vrai jeu, mais bon...","breadcrumb":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2022\/06\/23\/un-boggle-en-python\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mathweb.fr\/euclide\/2022\/06\/23\/un-boggle-en-python\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.mathweb.fr\/euclide\/2022\/06\/23\/un-boggle-en-python\/#primaryimage","url":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2022\/06\/head-articles-python-boggle.jpg","contentUrl":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2022\/06\/head-articles-python-boggle.jpg","width":740,"height":198,"caption":"Boggle Python"},{"@type":"BreadcrumbList","@id":"https:\/\/www.mathweb.fr\/euclide\/2022\/06\/23\/un-boggle-en-python\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.mathweb.fr\/euclide\/"},{"@type":"ListItem","position":2,"name":"Un Boggle en Python"}]},{"@type":"WebSite","@id":"https:\/\/www.mathweb.fr\/euclide\/#website","url":"https:\/\/www.mathweb.fr\/euclide\/","name":"Mathweb.fr","description":"Math\u00e9matiques, LaTeX et Python","publisher":{"@id":"https:\/\/www.mathweb.fr\/euclide\/#\/schema\/person\/e4d3bb07968238378f0d5052a70dcd69"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.mathweb.fr\/euclide\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":["Person","Organization"],"@id":"https:\/\/www.mathweb.fr\/euclide\/#\/schema\/person\/e4d3bb07968238378f0d5052a70dcd69","name":"St\u00e9phane Pasquet","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2025\/06\/cropped-logo-mathweb.webp","url":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2025\/06\/cropped-logo-mathweb.webp","contentUrl":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2025\/06\/cropped-logo-mathweb.webp","width":74,"height":77,"caption":"St\u00e9phane Pasquet"},"logo":{"@id":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2025\/06\/cropped-logo-mathweb.webp"}}]}},"_links":{"self":[{"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/posts\/7693","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/comments?post=7693"}],"version-history":[{"count":0,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/posts\/7693\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/media\/7697"}],"wp:attachment":[{"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/media?parent=7693"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/categories?post=7693"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/tags?post=7693"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}