mastermind.py

Created by schraf

Created on October 24, 2022

598 Bytes

Vidéo d’explication
Le célèbre jeu du Mastermind est assez facile à programmer en Python comme nous allons le voir.

Jouer

Lancez le jeu en tapant mm(), par défaut il y aura 6 couleurs différentes (chiffres de 1 à 6) et la combinaison sera de taille 4 avec possibilité de répétitions (par exemple “2446”).

Il s’affiche Coup 1 :, tapez alors votre proposition, par exemple 1234.

La machine vous dit alors combien de chiffres sont bien placés et combien sont mal placés.

Si vous voulez un niveau plus difficile avec une taille 4, tapez par exemple mm(4,8) pour qu’il y ait 8 couleurs, ou alors tapez mm(5) pour que la taille soit 5 (avec par défaut 6 couleurs) ou encore mm(6,9) pour une taille 6 avec 9 couleurs (bon courage !)

Le programme

  • Ligne 5 : on choisit les couleurs aléatoires jusqu'à obtenir la taille voulue. Remarquez l'utilisation de str pour avoir un code secret du type ["1","4","4","5"], la raison est que lorsque le joueur tapera sa proposition ce sera une chaine de caractères ainsi ce sera plus simple pour les comparaisons, de plus nous remplacerons plus bas certains éléments par des "#" ou des "*" donc autant travailler avec des caractères.
  • Ligne 6 : on a aucune idée de la durée du jeu
  • Lignes 7 et 8 : on mémorise le code secret et la proposition du joueur dans des listes
  • Ligne 9 : si le joueur n'a rien proposé le jeu s'arrête
  • Ligne 10 et 11 : Le nombre de coups joués augmente de 1 et on va compter les positions bien ou mal placées
  • Ligne 12 : on commence par les bien placées en comparant une à une les valeurs
  • Ligne 15 et 16 : pour ne pas recompter tout à l'heure les éléments, on les remplace par des caractères quelconques (ici # et *)
  • Ligne 17 : si on a 4 bien placés la partie est finie
  • Ligne 18 : on passe maintenant aux positions


from random import *

def mm(niv = 4, coul = 6):
  c = 1
  secret = [str(randint(1,coul)) for i in range(niv)]
  while True:
    code = list(secret)
    j = list(input("Coup {} : ".format(c)))
    if len(j) == 0: return "PERDU ! " + "".join(secret)
    c += 1
    bien, mal = 0, 0
    for i,v in enumerate(j):
      if v == code[i]:
        bien += 1
        j[i] = "#"
        code[i] = "*"
    if bien == 4: return "GAGNE !"
    for i,v in enumerate(j):
      if v in code:
        mal += 1
        code[code.index(v)] = "*"
    print("Bien: {}, Mal: {}".format(bien,mal))