def proposition_solution (proposition, code_s): """ Fonction qui effectue un coup du joueur ! comme la fontion proposer_solution, sans s'occuper des autres paramètres, tel que le score, les coups restant ... ne renvoie que (a,b) @proposition : [couleur (français) ...] = la proposition du joueur @return : (a,b) - (a,b) : a couleurs justes et bien placées, b couleurs justes et mal placées @throw : TableauInvalide """ code = list (code_s) if len (proposition) != len (code): raise TableauInvalide ("Tailles différentes") def incrementeur (a,b): if b == True: return a + 1 else: return a def supresseur (a,b): if b == True: return "*" else: return a eq = utils.bi_map (utils.egal, proposition, code) a = utils.foldl (incrementeur, 0, eq) reste_proposition = utils.bi_map (supresseur, proposition, eq) # Ce code aussi peut devenir plus fonctionnel ! b = 0 for i in reste_proposition: k = 0 while k < len (code): if i != "*" and code[k] != "*" and i == code[k]: b += 1 code[k] = "*" k += 1 return (a,b) #retourne a, le nombre de justes bien placées, et b le nombre de justes mal placées.
def send(rep): """ Envoie une requête utilisateur au Mastermind qui va gérer la redirection et les actions nécessaires @rep : str = la requête @return : str = l'état actuel """ if rep == "help": # Commande indépendante de l'état courant ! afficher_aide() elif rep == "regles": # Commande indépendante de l'état courant ! afficher("Affichage des règles sur la fenêtre graphique ...") set_ecran("regles", 2) elif rep == "clear": iconsole.clear() elif rep == "scores": # Commande indépendante de l'état courant ! afficher("Affichage des scores sur la fenêtre graphique ...") set_ecran("scores", 1) s, n = scores.recup_score(), scores.recup_nom() liste = utils.bi_map(lambda a, b: (a, b), s, n) afficher_liste("Scores", liste) elif rep == "fortune": try: maximum = persistance.get_propriete("phrases", "max") maximum = int(maximum) aleatoire = randint(0, maximum - 1) afficher(persistance.get_propriete("phrases", str(aleatoire))) except persistance.CleInvalide: afficher("Il est impossible de récupérer la fortune ... le fichier « phrases » doit être corrompu »") except persistanec.FichierInvalide: afficher( "Le fichier est introuvable ... Cela implique un problème dans le CODE SOURCE ... revenez plus tard ..." ) except ValueError: afficher("La valeur de « max » dans « phrases » est fausse et ne représente pas un nombre valide ...") except: afficher("Une erreur inconnue est survenue ... ") elif rep == "couleurs": afficher_couleurs() elif get_etat() == "Humain-Joue": humain_joue(rep) elif get_etat() == "Menu": menu(rep) elif get_etat() == "Menu-Partie": menu_partie(rep) elif get_etat() == "Theme": theme(rep) elif get_etat() == "Niveau": niveau(rep) elif get_etat() == "Proposer-Code": proposer_code(rep) elif get_etat() == "Definir-Code": definir_code(rep) else: raise ErreurFatale return get_etat()