some more comments on mastermind

This commit is contained in:
nojhan 2012-05-11 22:09:23 +02:00
commit 6316ec69fd

View file

@ -3,29 +3,33 @@
import random import random
class Mastermind(): class Mastermind():
def __init__(self, slots = 4, colors = [0, 1, 2, 3, 4] ): def __init__(self, slots = 4, colors = [i for i in range(8)] ):
#self.colors = { 0:"rouge", 1:"jaune", 2:"vert", 3:"bleu", 4:"orange", 5:"blanc", 6:"violet", 7:"fuchsia"} """Initialise le plateau avec un nombre de cases et de couleurs donnés par l'utilisateur."""
self.colors = [i for i in range(8)] self.colors = colors
self.slots = slots self.slots = slots
def random_code(self): def random_code(self):
code = [] """Tire au hasard un code à faire deviner."""
for s in range(self.slots): # Choisir au hasard un élément dans "colors" pour chaque nombre entier entre 0 et "slots"
code.append( random.randrange( len(self.colors) ) ) return [ random.choice(self.colors) for i in range(self.slots) ]
return code
def feedback(self, code, secret_code ): def feedback(self, code, secret_code ):
"""Décompte les couleurs existantes dans le code secret"""
# Le code passé doit avoir le même nombre de chiffres que le code secret,
# sinon, il y a vraiment un problème.
assert( len(code) == len(secret_code) ) assert( len(code) == len(secret_code) )
good_positions = 0 good_positions = 0
good_colors = 0 good_colors = 0
for i in range(len(code)): for i in range(len(code)):
# Si la couleur est à la bonne position # Si la couleur est à la bonne position
if code[i] == secret_code[i]: if code[i] == secret_code[i]:
good_positions += 1 good_positions += 1
# Si la couleur n'est pas à cette position, mais qu'elle existe ailleurs # Si la couleur n'est pas à cette position, mais qu'elle existe ailleurs:
# == si le code est dans la concaténation des chiffres avant le chiffre vérifié et de ceux après
elif code[i] in secret_code[:i]+secret_code[i+1:]: elif code[i] in secret_code[:i]+secret_code[i+1:]:
good_colors += 1 good_colors += 1
@ -33,9 +37,14 @@ class Mastermind():
def ask_code(self): def ask_code(self):
print("Entrez votre code") print("Entrez votre code (4 chiffres entre 0 et 7)")
# On s'attends à une série de chiffres accolés,
# on s'assure donc de considérer l'entrée comme une chaine de caractères…
str_code = str(input()) str_code = str(input())
# … sur lesquels on pourra itérer, en les interprétants comme des entiers.
code = [int(i) for i in str_code] code = [int(i) for i in str_code]
return code return code
@ -59,7 +68,7 @@ class Mastermind():
else: else:
gp,gc = self.feedback( code, secret_code ) gp,gc = self.feedback( code, secret_code )
self.display(code,gp,gc) self.display(code,gp,gc)
if code == secret_code: if code == secret_code:
return True,fails return True,fails
else: else: