{"id":7498,"date":"2022-04-19T16:34:36","date_gmt":"2022-04-19T14:34:36","guid":{"rendered":"https:\/\/www.mathweb.fr\/euclide\/?p=7498"},"modified":"2022-06-10T15:27:27","modified_gmt":"2022-06-10T13:27:27","slug":"un-mastermind-en-python","status":"publish","type":"post","link":"https:\/\/www.mathweb.fr\/euclide\/2022\/04\/19\/un-mastermind-en-python\/","title":{"rendered":"Un MasterMind en Python"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Nous allons voir comment impl\u00e9menter un MasterMind en Python, mais uniquement en mode console.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2022\/06\/image.png\" alt=\"mastermind python\" class=\"wp-image-7650\" width=\"502\" height=\"502\" srcset=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2022\/06\/image.png 800w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2022\/06\/image-300x300.png 300w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2022\/06\/image-100x100.png 100w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2022\/06\/image-600x600.png 600w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2022\/06\/image-150x150.png 150w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2022\/06\/image-768x768.png 768w\" sizes=\"auto, (max-width: 502px) 100vw, 502px\" \/><\/figure>\n<\/div>\n\n\n<!--more-->\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 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\/04\/19\/un-mastermind-en-python\/#MasterMind_en_Python_le_jeu\" >MasterMind en Python: le jeu<\/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\/04\/19\/un-mastermind-en-python\/#MasterMind_en_Python_implementation\" >MasterMind en Python: 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\/04\/19\/un-mastermind-en-python\/#Preliminaires\" >Pr\u00e9liminaires<\/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\/04\/19\/un-mastermind-en-python\/#Verifications\" >V\u00e9rifications<\/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\/04\/19\/un-mastermind-en-python\/#Renvoi_du_nombre_de_bonnes_couleurs\" >Renvoi du nombre de bonnes couleurs<\/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\/04\/19\/un-mastermind-en-python\/#Le_jeu\" >Le jeu<\/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\/04\/19\/un-mastermind-en-python\/#Memorisation_des_propositions\" >M\u00e9morisation des propositions<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"MasterMind_en_Python_le_jeu\"><\/span>MasterMind en Python: le jeu<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Le jeu du <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Mastermind\" target=\"_blank\" rel=\"noreferrer noopener\">MasterMind<\/a> consiste deviner une combinaison de couleurs.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c0 chaque proposition, votre adversaire doit vous dire:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>combien de couleurs sont au(x) bon(s) endroit(s), sans indiquer lesquelles;<\/li><li>combien de couleurs sont bonnes mais pas au bon endroit.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Vous l&#8217;aurez compris, votre adversaire, ce sera l&#8217;ordinateur&#8230; C&#8217;est lui qui d\u00e9cidera la combinaison de couleurs \u00e0 trouver.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"MasterMind_en_Python_implementation\"><\/span>MasterMind en Python: 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=\"Preliminaires\"><\/span>Pr\u00e9liminaires<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Nous allons d\u00e9cider du fait que les couleurs seront repr\u00e9sent\u00e9es par des lettres capitalis\u00e9es de l&#8217;alphabet latin: A, B, C, D, &#8230;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nous allons donc \u00e9crire une premi\u00e8re fonction qui retourne l&#8217;alphabet sur lequel s&#8217;appuyer pour g\u00e9n\u00e9rer une combinaison de couleurs \u00e0 trouver:<\/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=\"\">from string import ascii_uppercase\n\ndef gen_colors(code_size):\n    if code_size &lt;= 26:\n        return ascii_uppercase[:code_size]\n    else:\n        return ascii_uppercase<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Cette fonction retourne donc les <em>n<\/em> premi\u00e8res lettres de l&#8217;alphabet si <em>n<\/em>&lt; 27, et retourne l&#8217;alphabet complet si <em>n<\/em> &gt; 26.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&gt;&gt;&gt; gen_colors(5)\n'ABCDE'\n&gt;&gt;&gt; gen_colors(200)\n'ABCDEFGHIJKLMNOPQRSTUVWXYZ'<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Il nous faut maintenant une fonction retournant une combinaison al\u00e9atoire de <em>n<\/em> couleurs prises parmi toutes celles de ce nouvel ensemble.<\/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=\"\">from random import choice\ndef gen_code(code_size, colors):\n    r = ''\n    for _ in range(code_size):\n        r += choice(colors)<\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&gt;&gt;&gt; gen_code(5,'ABCDEFGH')\n'GCBAG'<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Verifications\"><\/span>V\u00e9rifications<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Nous allons dans un premier temps \u00e9crire une fonction <span style=\"font-family: Courier\">check_guess(guess, code_size, colors)<\/span> qui v\u00e9rifie si, d&#8217;une part, la longueur de &#8220;guess&#8221; est la m\u00eame que code_size, et d&#8217;autre part si une couleur pr\u00e9sente dans &#8220;guess&#8221; est aussi dans &#8220;colors&#8221;:<\/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 check_guess(guess, code_size, colors):\n    present_colors = [ i in colors for i in guess ]\n    return len( guess ) == code_size and False not in present_colors<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">J&#8217;ai opt\u00e9 pour cette solution, mais il y a d&#8217;autres possibilit\u00e9s.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ici, je construis une liste de bool\u00e9ens correspondants au fait que chaque \u00e9l\u00e9ment de &#8220;guess&#8221; se trouve ou non dans &#8220;colors&#8221;. Si il n&#8217;y a aucun &#8220;False&#8221; dans cette liste, cela signifie que toutes les couleurs propos\u00e9es sont dans l&#8217;alphabet autoris\u00e9.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si la longueur de &#8220;guess&#8221; est la m\u00eame que celle de &#8220;colors&#8221; ET si aucun &#8220;False&#8221; est dans la liste construite, la fonction renvoie &#8220;True&#8221;.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Renvoi_du_nombre_de_bonnes_couleurs\"><\/span>Renvoi du nombre de bonnes couleurs <span class=\"ez-toc-section-end\"><\/span><\/h3>\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 score_guess(code, guess):\n    n_good_position = 0\n    n_false_position = 0\n    if len( code ) == len( guess ):\n        for i in range( len(code) ):\n            if code[i] == guess[i]:\n                n_good_position += 1\n            elif guess[i] in code:\n                n_false_position += 1\n        \n        return n_good_position , n_false_position<\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&gt;&gt;&gt; score_guess('ABCD' , 'AABC')\n(1, 3)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Il y a en effet 1 bonne lettre (\u00e0 sa place) et en tout 3 lettres correctes mais pas \u00e0 la bonne place (le second &#8216;A&#8217; est \u00e0 la deuxi\u00e8me position et non \u00e0 la 1\u00e8re, le &#8216;B&#8217; et le &#8216;C&#8217; sont bonnes mais pas au bon endroit).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Le_jeu\"><\/span>Le jeu<span class=\"ez-toc-section-end\"><\/span><\/h3>\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 play(code_size, nb_colors):\n    print(f'Les diff\u00e9rentes couleurs possibles sont: {gen_colors(nb_colors)}.')\n    print(f'Le code \u00e0 trouver est de longueur {code_size}.')\n    n = 0\n    to_find = gen_code(code_size, gen_colors(nb_colors)) # combinaison \u00e0 trouver\n    while True:\n        guess = input(f'{n} --> ').upper()\n        if not check_guess(guess, code_size, gen_colors(nb_colors)):\n            print('Mauvaise taille ou couleur...')\n        elif guess != to_find:\n            print( score_guess(to_find, guess) )\n            n += 1\n        else:\n            print( f'F\u00e9licitations, vous avez trouv\u00e9 apr\u00e8s {n+1} essais!' )\n            break<\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&gt;&gt;&gt; play(4,4)\nLes diff\u00e9rentes couleurs possibles sont: ABCD.\nLe code \u00e0 trouver est de longueur 4.\n0 --&gt; ABCD\n(1, 2)\n1 --&gt; ABBB\n(0, 1)\n2 --&gt; CBCC\n(1, 2)\n3 --&gt; BBDD\n(1, 1)\n4 --&gt; DBCB\n(0, 2)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Bon, je ne sais pas pour vous mais c&#8217;est assez frustrant de ne pas trouver apr\u00e8s un certain nombre d&#8217;essais.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Je vais donc ajouter un argument \u00e0 ma fonction pour limiter le nombre de coups maximum.<\/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 play(code_size, nb_colors , nb_max = None):\n    print(f'Possible colors are: {gen_colors(nb_colors)}.')\n    print(f'Code size is {code_size}.')\n    n = 0\n    count = 0\n    to_find = gen_code(code_size, gen_colors(nb_colors)) # combinaison \u00e0 trouver\n    while True:\n        if nb_max != None and n &lt;= nb_max or nb_max == None:\n            guess = input(f'{n} --> ').upper()\n            if not check_guess(guess, code_size, gen_colors(nb_colors)):\n                print('Mauvaise taille ou couleur...')\n            elif guess != to_find:\n                print( score_guess(to_find, guess) )\n                n += 1\n            else:\n                print( f'F\u00e9licitations, vous avez trouv\u00e9 apr\u00e8s {n+1} essais!' )\n                break\n        else:\n            print(f'Il fallait trouver: {to_find}')\n            break<\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&gt;&gt;&gt; play(4,4,3)\nPossible colors are: ABCD.\nCode size is 4.\n0 --&gt; aaaa\n(1, 3)\n1 --&gt; bbbb\n(1, 3)\n2 --&gt; cccc\n(1, 3)\n3 --&gt; abcd\n(1, 3)\nIl fallait trouver: DACB<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Memorisation_des_propositions\"><\/span>M\u00e9morisation des propositions<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Dans la pratique, il est possible de s&#8217;y perdre avec toutes les propositions que l&#8217;on a faites.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si l&#8217;on souhaite ne pas compter les coups identiques, on peut m\u00e9moriser tous les coups dans une liste L.<\/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 play(code_size, nb_colors , nb_max = None):\n    print(f'Possible colors are: {gen_colors(nb_colors)}.')\n    print(f'Code size is {code_size}.')\n    n = 0\n    count = 0\n    to_find = gen_code(code_size, gen_colors(nb_colors)) # combinaison \u00e0 trouver\n    L = []\n    while True:\n        if nb_max != None and n &lt;= nb_max or nb_max == None:\n            guess = input(f'{n} --> ').upper()\n            if not check_guess(guess, code_size, gen_colors(nb_colors)):\n                print('Mauvaise taille ou couleur...')\n            elif  guess in L:\n                print('Proposition d\u00e9j\u00e0 faite avant...')\n            elif guess != to_find:\n                print( score_guess(to_find, guess) )\n                L.append( guess )\n                n += 1\n            else:\n                print( f'F\u00e9licitations, vous avez trouv\u00e9 apr\u00e8s {n+1} essais!' )\n                break\n        else:\n            print(f'Il fallait trouver: {to_find}')\n            break<\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&gt;&gt;&gt; play(4,4,3)\nPossible colors are: ABCD.\nCode size is 4.\n0 --&gt; abcd\n(0, 4)\n1 --&gt; abcd\nProposition d\u00e9j\u00e0 faite avant...\n1 --&gt; aabb\n(0, 4)\n2 --&gt; bbbb\n(1, 3)\n3 --&gt; dcba\n(2, 2)\nIl fallait trouver: BCDA<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Bon, l\u00e0, on est pas mal non ?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nous allons voir comment impl\u00e9menter un MasterMind en Python, mais uniquement en mode console.<\/p>\n","protected":false},"author":1,"featured_media":7499,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-7498","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-python"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Un MasterMind en Python - Mathweb.fr<\/title>\n<meta name=\"description\" content=\"Nous allons voir comment impl\u00e9menter un MasterMind en Python, mais uniquement en mode console. Le mode graphique sera pour plus tard...\" \/>\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\/04\/19\/un-mastermind-en-python\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Un MasterMind en Python - Mathweb.fr\" \/>\n<meta property=\"og:description\" content=\"Nous allons voir comment impl\u00e9menter un MasterMind en Python, mais uniquement en mode console. Le mode graphique sera pour plus tard...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mathweb.fr\/euclide\/2022\/04\/19\/un-mastermind-en-python\/\" \/>\n<meta property=\"og:site_name\" content=\"Mathweb.fr\" \/>\n<meta property=\"article:published_time\" content=\"2022-04-19T14:34:36+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-06-10T13:27:27+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2022\/04\/head-articles-python-mastermind.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=\"5 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\\\/04\\\/19\\\/un-mastermind-en-python\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2022\\\/04\\\/19\\\/un-mastermind-en-python\\\/\"},\"author\":{\"name\":\"St\u00e9phane Pasquet\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#\\\/schema\\\/person\\\/e4d3bb07968238378f0d5052a70dcd69\"},\"headline\":\"Un MasterMind en Python\",\"datePublished\":\"2022-04-19T14:34:36+00:00\",\"dateModified\":\"2022-06-10T13:27:27+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2022\\\/04\\\/19\\\/un-mastermind-en-python\\\/\"},\"wordCount\":464,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#\\\/schema\\\/person\\\/e4d3bb07968238378f0d5052a70dcd69\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2022\\\/04\\\/19\\\/un-mastermind-en-python\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2022\\\/04\\\/head-articles-python-mastermind.jpg\",\"articleSection\":[\"Python\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2022\\\/04\\\/19\\\/un-mastermind-en-python\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2022\\\/04\\\/19\\\/un-mastermind-en-python\\\/\",\"url\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2022\\\/04\\\/19\\\/un-mastermind-en-python\\\/\",\"name\":\"Un MasterMind en Python - Mathweb.fr\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2022\\\/04\\\/19\\\/un-mastermind-en-python\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2022\\\/04\\\/19\\\/un-mastermind-en-python\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2022\\\/04\\\/head-articles-python-mastermind.jpg\",\"datePublished\":\"2022-04-19T14:34:36+00:00\",\"dateModified\":\"2022-06-10T13:27:27+00:00\",\"description\":\"Nous allons voir comment impl\u00e9menter un MasterMind en Python, mais uniquement en mode console. Le mode graphique sera pour plus tard...\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2022\\\/04\\\/19\\\/un-mastermind-en-python\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2022\\\/04\\\/19\\\/un-mastermind-en-python\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2022\\\/04\\\/19\\\/un-mastermind-en-python\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2022\\\/04\\\/head-articles-python-mastermind.jpg\",\"contentUrl\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2022\\\/04\\\/head-articles-python-mastermind.jpg\",\"width\":740,\"height\":198,\"caption\":\"mastermind python\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2022\\\/04\\\/19\\\/un-mastermind-en-python\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Un MasterMind 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 MasterMind en Python - Mathweb.fr","description":"Nous allons voir comment impl\u00e9menter un MasterMind en Python, mais uniquement en mode console. Le mode graphique sera pour plus tard...","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\/04\/19\/un-mastermind-en-python\/","og_locale":"fr_FR","og_type":"article","og_title":"Un MasterMind en Python - Mathweb.fr","og_description":"Nous allons voir comment impl\u00e9menter un MasterMind en Python, mais uniquement en mode console. Le mode graphique sera pour plus tard...","og_url":"https:\/\/www.mathweb.fr\/euclide\/2022\/04\/19\/un-mastermind-en-python\/","og_site_name":"Mathweb.fr","article_published_time":"2022-04-19T14:34:36+00:00","article_modified_time":"2022-06-10T13:27:27+00:00","og_image":[{"width":740,"height":198,"url":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2022\/04\/head-articles-python-mastermind.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":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.mathweb.fr\/euclide\/2022\/04\/19\/un-mastermind-en-python\/#article","isPartOf":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2022\/04\/19\/un-mastermind-en-python\/"},"author":{"name":"St\u00e9phane Pasquet","@id":"https:\/\/www.mathweb.fr\/euclide\/#\/schema\/person\/e4d3bb07968238378f0d5052a70dcd69"},"headline":"Un MasterMind en Python","datePublished":"2022-04-19T14:34:36+00:00","dateModified":"2022-06-10T13:27:27+00:00","mainEntityOfPage":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2022\/04\/19\/un-mastermind-en-python\/"},"wordCount":464,"commentCount":0,"publisher":{"@id":"https:\/\/www.mathweb.fr\/euclide\/#\/schema\/person\/e4d3bb07968238378f0d5052a70dcd69"},"image":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2022\/04\/19\/un-mastermind-en-python\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2022\/04\/head-articles-python-mastermind.jpg","articleSection":["Python"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.mathweb.fr\/euclide\/2022\/04\/19\/un-mastermind-en-python\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.mathweb.fr\/euclide\/2022\/04\/19\/un-mastermind-en-python\/","url":"https:\/\/www.mathweb.fr\/euclide\/2022\/04\/19\/un-mastermind-en-python\/","name":"Un MasterMind en Python - Mathweb.fr","isPartOf":{"@id":"https:\/\/www.mathweb.fr\/euclide\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2022\/04\/19\/un-mastermind-en-python\/#primaryimage"},"image":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2022\/04\/19\/un-mastermind-en-python\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2022\/04\/head-articles-python-mastermind.jpg","datePublished":"2022-04-19T14:34:36+00:00","dateModified":"2022-06-10T13:27:27+00:00","description":"Nous allons voir comment impl\u00e9menter un MasterMind en Python, mais uniquement en mode console. Le mode graphique sera pour plus tard...","breadcrumb":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2022\/04\/19\/un-mastermind-en-python\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mathweb.fr\/euclide\/2022\/04\/19\/un-mastermind-en-python\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.mathweb.fr\/euclide\/2022\/04\/19\/un-mastermind-en-python\/#primaryimage","url":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2022\/04\/head-articles-python-mastermind.jpg","contentUrl":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2022\/04\/head-articles-python-mastermind.jpg","width":740,"height":198,"caption":"mastermind python"},{"@type":"BreadcrumbList","@id":"https:\/\/www.mathweb.fr\/euclide\/2022\/04\/19\/un-mastermind-en-python\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.mathweb.fr\/euclide\/"},{"@type":"ListItem","position":2,"name":"Un MasterMind 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\/7498","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=7498"}],"version-history":[{"count":0,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/posts\/7498\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/media\/7499"}],"wp:attachment":[{"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/media?parent=7498"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/categories?post=7498"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/tags?post=7498"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}