Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from unicodedata import normalize
- import random
- def convertir(mot):
- """Renvoie le mot converti en minuscules et sans caractères spéciaux"""
- return(normalize('NFKD',mot).encode('ASCII','ignore')).decode().lower()
- def initialiserDictionnaire(nom_fichier):
- """initialise un dict des mobs d'un fichier sans caractere speciaux"""
- f=open(nom_fichier)
- dicomotgood=dict()
- ligne=None
- while ligne!='':
- ligne=f.readline()
- ligne=ligne[:-1]#on evite de prend le //n
- if '-' in ligne:
- ligne=ligne.replace('-','')#on supprime les trait d'union
- if len(ligne) not in dicomotgood.keys():#on créer une clef de la taille d'un mot si il existe pas sinon on creer une cle de la longueur du mot
- dicomotgood[len(ligne)]=[]
- dicomotgood[len(ligne)].append(convertir(ligne))
- f.close()
- return dicomotgood
- def initialiserSac():
- """initialise le sac d'un jeu de scrabble francais"""
- Sac=9*['a']+15*['e']+8*['i']+5*['l']+6*(['n']+['o']+['r']+['s']+['t']+['u'])+1*(['j']+['k']+['q']+['w']+['x']+['y']+['z'])+2*(['g']+['b']+['c']+['f']+['g']+['h']+['p']+['v'])+3*(['d']+['m'])+2*['*']#création du sac
- return Sac
- def piocher(sac,n):
- """pioche n element dans une liste un sac ici"""
- lettrepiocher=[]
- for i in range(n):
- position=random.randint(0,len(sac)-1)#on pioche la lettre et on supprime la lettre piocher n fois
- lettrepiocher.append(sac[position])
- sac.pop(position)
- return lettrepiocher
- def score(mot):
- """calcul le score d'un mot selon les regle francaise"""
- point=0
- dico=dict()
- dico['*']=0#initialisation du dico en clé les lettre et en valeur les points rapportés
- dico['e','a','i','n','o','r','s','t','u','l']=1
- dico['d','m','g']=2
- dico['b','c','p']=3
- dico['f','h','v']=4
- dico['j','q']=8
- dico['k','w','x','y','z']=10
- for lettre in mot:
- for cle in dico.keys():#on check dans quel groupe de lettre et la lettre
- if lettre in cle:
- point+=dico[cle]#on ajoute la valeur representé par le groupe de lettre
- return point
- def trouverMotDeLongueurFixe(lettres, k, dictionnaire):
- """trouve un mot de longueur k avec des lettre données sous forme de liste"""
- for values in dictionnaire[k]:
- flag=True#pour naviguer entre les boucles
- for lettre in values:
- if lettre not in lettres or values.count(lettre)>lettres.count(lettre):
- flag=False#naviguer entre les boucles
- break
- if flag==True:#si le mot est trouvé
- return values
- return 'pas trouvé'
- def trouverMotDeLongueurMaximale(lettres,dictionnaire):
- """trouve le mot le plus long possible à faire selon les lettres en main"""
- k=len(lettres)
- candidat = trouverMotDeLongueurFixe(lettres, k, dictionnaire)
- while candidat=="pas trouvé" and k>0:#si le mot est impossible a faire en fonction des lettres en main
- k-=1
- candidat = trouverMotDeLongueurFixe(lettres,k, dictionnaire)
- return candidat
- def trouverMotDeLongueurFixeEtDeScoreMaximal(lettres,k,dictionnaire):
- """trouve le meilleur mot à faire parmis les mots de tailles k grâce aux lettres en main"""
- save=dictionnaire.copy()#on save le dico
- candidat=trouverMotDeLongueurFixe(lettres, k, dictionnaire)
- if candidat=="pas trouvé":
- return candidat
- save[k].remove(candidat)#on supprime des valeurs du dico save le premier mot
- challenger=""
- while True:#si cest un mot
- challenger=trouverMotDeLongueurFixe(lettres, k, save)
- if challenger=="pas trouvé":
- return candidat
- if score(challenger)>score(candidat):#on prend le meilleur score
- candidat=challenger
- save[k].remove(challenger)#on garde le meilleur score et on candidat
- def trouverMotDeScoreMaximal(lettres,dictionnaire):
- """trouve le mot au score maximal"""
- k=len(lettres)
- candidat = ""
- while k>0:
- challenger = trouverMotDeLongueurFixeEtDeScoreMaximal(lettres,k,dictionnaire)
- candidat = challenger if (challenger!="pas trouvé" and score(challenger)>score(candidat)) else candidat
- k-=1
- return candidat
- if __name__ == '__main__':
- print("sac du scrabble:",initialiserSac())
- sac=initialiserSac()
- print("je pioche 7 lettres j'ai:",piocher(sac,7))
- print("score du mot kiwi:",score('kiwi'))
- lettres=['a','r','u','d','m','e','o']
- dictionnaire=initialiserDictionnaire('liste-mots-fr-iso-8859-15.txt')
- print('=======Recherche de mots de longueur fixe=========')
- for k in range(1,len(lettres)+1):
- trouvfix=trouverMotDeLongueurFixe(lettres,k,dictionnaire)
- if trouvfix != 'pas trouvé':
- print('Recherche d un mot de longueur',k,'... Trouvé:',trouvfix,'qui rapporte',score(trouvfix),'point' if score(trouvfix)==1 else 'points' )
- else:print('pas trouvé pour une longueur',k)
- print('=========== recherche d\'un mot de longueur maximal ========')
- print('voici un mot de longueur maximale pour la réglette', lettres,':',trouverMotDeLongueurMaximale(lettres,dictionnaire),'qui rapporte',score(trouvfix),'point' if score(trouvfix)==1 else 'points')
- print('========= recherche de mots de longueur fixe et de score maximal =======')
- for l in range(1,len(lettres)+1):
- trouvtrouv=trouverMotDeLongueurFixeEtDeScoreMaximal(lettres,k,dictionnaire)
- if trouvtrouv != 'pas trouvé':
- print('recherche d\'un mot de longueur',l,'... trouvé:',trouvtrouv,',qui rapport',score(trouvtrouv),'point' if score(trouvtrouv)==1 else 'points')
- else:('pas trouvé pour une longueur',l)
- trouvtrouvtrouv=trouverMotDeScoreMaximal(lettres,dictionnaire)
- print('voici un mot de score maximal pour la reglette',lettres,':',trouvtrouvtrouv,', qui rapporte',score(trouvtrouvtrouv),'point' if score(trouvtrouvtrouv)==1 else 'points')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement