mardi 26 octobre 2021

MasterMind with Python (for beginners)

 ****************************************************
****************** Simple MASTERMIND **************
****************************************************

 

Here is a very simple mastermind game in Python 3.7 PyScripter  4.0.0.6 x64

*
done with PyScripter
https://sourceforge.net/projects/pyscripter/
*
The program proposes to find an arrangement of 5 digits among 9
without 0, without double.
he analyzes the responses and responds accordingly.
*
Method:
*
The program builds an array of arrangements
valid from 12345 to 87654, from Min to Max.
This gives 6720 arrangements:
n! / (n-k)! = A
8! / (8-5)! = 6720
https://fr.wikipedia.org/wiki/Arrangement
*
The method is simple:
We start from 12345-1 (Min) and add +1 until (Max = 6720)
all arrangements with 0 and double are rejected.
*
Then the program chooses an arrangement in this table
by a random number from 0 to A (6720)
*
Choice request is made.
it's tested:
If it's: too long, too short, with 0, with doubles : it's rejected.
*
if it's correct:
it's compared to the arrangements to be found.
For a well-placed number: +1 in the variable w
For a misplaced number: +1 in the variable b
If the answer is correct the program stops and displays the score an numbers of try.
In case of wrong answer the program displays w and b
and wait for a new choice.
*
If you enter the previous choice, the program understand
that we do not find the right arrangement, displays the arrangement to be found
and stop.
* 

A good exercise for beginners in python for approaching programming step by step, always try to build subroutines that work all by themselves in a new independent module and then include them in the main program.
It's easy to modify and everyone can contribute their ideas
by placing print (...) here and there, stops etc etc for improve it.
*
Completely open-source !
Lionel Nivelle 2021
*
The next approach:
The program must find an arrangement that the user suggests 

All of  Def() of this program are suitable but the program is totaly different.
********************************************************

 

  *****************************************************
****************** Simple MASTERMIND ***************
*****************************************************


Voici un jeu de mastermind tout simple en Python 3.7 PyScripter 4.0.0.6 x64
*
édité à l'aide de PyScripter
https://sourceforge.net/projects/pyscripter/
*
Le programme propose de trouver un arrangement de 5 chiffres parmi 9
sans 0 , sans double.
il analyse les réponses et réponds en conséquence.
*
Méthode :
*
Le programme construit un tableau des arrangements
valables de 12345 a 87654 , de Min à Max .
Cela donne 6720 arrangements :
n! / (n-k) ! =A
8! / (8-5) ! = 6720
https://fr.wikipedia.org/wiki/Arrangement
*
La méthode est simple :
On part de 12345-1 (Min) et on ajoute +1 jusqu'a (Max)
tous les arrangements avec 0 et des doubles sont rejetés.
*
Puis le programme choisi un arrangement dans ce tableau
par un nombre aléatoire de 0 a A (6720)
*
Une demande de choix est faite .
il est testé :
S'il est : trop long ,trop court, avec des 0 , avec des doubles
il est rejeté .
*
s'il est correct:
il est comparé à l’arrangement à trouver.
Pour un chiffre bien placé : +1 dans la variable w
Pour un chiffre mal placé  : +1 dans la variable b
En cas de bonne réponse le programme s'arrête et affiche le score.
En cas de mauvaise réponse le programme affiche w et b
et attends un niveau choix.
*
Si on entre le choix précédent , le programme comprend
que l'on ne trouve pas le bon arrangement et affiche l'arrangement à trouver
et s'arrête.
*
Un bon exercice pour débutant en python pour l'approche d'une programmation
pas à pas , tenter toujours de construire des sous routines qui fonctionnent
toutes seules dans un nouveau module indépendant et ensuite les inclure dans le programme principal .
Il est simple à modifier et chacun peut y apporter ses idées
en y plaçant de print(...) par ci par là , des arrêts etc etc pour l’améliorer.
*
Et complètement Open-source !
Lionel Nivelle 2021
*
La prochaine approche :
Le programme doit trouver un arrangement que l'utilisateur propose

Toutes les sous-routines sont utilisables mais le programme devient tres different
*
**********************************************************************************

#-------------------------------------------------------------------------------
# Name:        le pc propose mastermind
# Purpose:
# Author:      Lionel Nivelle
# Created:     24/10/2021
# Licence:     <Open-Source>
#                   PyScripter   4.0.0.6 x64
#-------------------------------------------------------------------------------

import secrets
# Super Mastermind

# 8 couleurs 5 cases en 12 rangées : le "Super" Master Mind
"""
Il se présente généralement sous la forme d'un plateau perforé de 10 ou 12 rangées de 4 ou 5 trous pouvant accueillir des pions de couleurs.
Les 6 couleurs sont dans la version originale : jaune, bleu, rouge, vert, blanc, noir.
"""

Tableau=[0]*6721 # tableau des combinaisons : voir formule de maths
Max = 87654
Min = 12345
Codage =[12] # tableau des reponse bien place / mal placé

def Nodouble(x): # si dans x y a un double return = False
    Double = True
    for i in range (0,len(x)):
        for j in range (0,len(x)):
            #print ( x[i] ,  "   " , x[j])
            if (x[i] == x[j]) and j!=i:
                Double = False
    return Double

def Lettre(x):
    #cherche une lettre dans une chaine x
    #que des chiffres : Lettre= None
    #avec des lettres : Lettre <> None
    OK= False
    for i in range (0, len(x)):
        if not(int(ord(x[i]))>=48 and int(ord(x[i]))<=57):
            return OK

def Entrée(x): # controle de l'input du joueur
    OK = False
    if Nodouble(x):
        OK = True  #pas de double
    else:
        print('double')
        OK = False
    if OK:
        if x.count(str(0))==0:
            OK = True #pas de zero
        else:
            print ('zero')
            OK = False
    if OK:
        if len(x)==5:
            OK = True #bonne longueur
        else:
            print ('longueur')
            OK = False
    if OK:
        if Lettre(x)== None: #pas de lettre
            OK = True
        else:
            print ('lettre')
            OK = False
    return OK

def ChoixDuPc(a): # le pc choisi une combinaison <sans double , sans 0
                  # a partir du tableau de 6720 elements
    while a>6720:
        a= secrets.randbelow (6721)
        if a>6720: #  *********** en cas d'erreur peu probable
            print (Tableau[a])
    return (Tableau[a])

def analyse(x , Atrouver):
    b=0
    w=0
    s=""
    for i in range (0, len(x)):
        for j in range (0, len(x)):
            if x[i] == Atrouver[j]:
                if i==j:
                    w+=1
                else:
                    b+=1
    s=str(w)+str(b)
    return s

def Cls():
    for i in range(50):
        print()
    print ('MASTERMIND')
    print ('en entrant 2 fois la même combinaison : le jeu s''arrête' )
    print ('et donne la reponse ')
    print()

# ***********************************************************
# ***********  construction du tableaux de combinaisons ***************
# ***********        pas de 0 , pas de double      **********************
# ***********************************************************

code = Min-1
CODE=str(code)
# OK = False
Nombredecode=0
for i in range (Min , Max+1):
    code+=1
    CODE=str(code)
    # test absence de 0 et de 9
    if CODE.count("0")==0  and str(CODE).count("9")==0:
        # test presence de double
        if Nodouble(CODE):
            Nombredecode+=1
            Tableau[Nombredecode]= CODE
            # print (CODE)

# Atrouver
Atrouver= (ChoixDuPc(7000)) # 7000 pour forcer la boucle dans la def
# print (Atrouver) # ecrit la combinaison a trouver pour controle

Cls() # remonte l'ecran

#***********************************************************
#********************** entree au clavier ************************
#***********************************************************
precedente="" # entrée precedente
Stop=False
tour=0   # entree au clavier
fin='non'
while fin=='non':
    N=False  # True si entree correcte pas de 0 , de double , longueur = 5 , pas de lettre
    while N==False:
        n=input('  votre entrée : ')
        if Entrée(n) == True:
            N=True
        else:
            N= False
    tour+=1
#**********************************************************
#*************** analyse *************************************
#**********************************************************
    Retour = analyse(n , Atrouver)
    print ('tour N° :' , tour , 'proposition',n , 'bien placé :' ,Retour[0] , 'mal placé :' ,Retour[1] , end ='')

    # *********************************************
    # ***********   test reponse = precedente  ************
    # *********************************************
    if n==precedente:
        print (' *** STOP ****')
        Stop=True
    else:
       precedente=n
    # *********************************************
    # *********** arrêt voulu ou gagné ******************
    # *********************************************
    if Retour[0] == '5':
        fin ='oui'
    else:
        if Stop:
            print ('la reponse est : ',Atrouver)
            print ('bye')
            fin="oui"

if not(Stop):
#*********************************************************
#*************** gagné *************************************
#*********************************************************
    print()
    print('********************************************')
    print ('BRAVO , trouvé en ',  tour , 'coup', end ="")
    if tour>1:
        print('s')
    else:
        print()
**********************************************************


1 commentaire:

macareopaetzold a dit…

TINN - Titanium band rings for bicycle
TINN - Titanium band titanium tv alternative rings titanium jewelry for bicycle. Product หาเงินออนไลน์ Type - microtouch solo titanium Bicycle titanium apple watch - 2-4-5-6-8. $14.90. Add to Cart.