Sujet : Re: Tricher au scrabble...
De : ram (at) *nospam* zedat.fu-berlin.de (Stefan Ram)
Groupes : fr.comp.lang.pythonDate : 28. Nov 2023, 14:22:24
Autres entêtes
Organisation : Stefan Ram
Message-ID : <recherche-20231128131821@ram.dialup.fu-berlin.de>
References : 1
Dominique <
dominique.sextant@orange.fr.invalid> writes:
Ce script fonctionne en deux blocs.
Il y a encore une remarque à faire sur le style de programmation :
si un script est composé de deux blocs, il sera plus clair
pour le lecteur si chaque bloc est défini comme une fonction
et nommé par sa tâche.
La vraie limite vient de ce que je ne vois pas trop comment faire pour
que l'application cherche un mot avec mes 7 lettres, en cas d'échec,
avec 6 lettres etc. Je pense que je pourrais utiliser les outils
d'itertools (combination ou permutations. mais j'ai peur que les temps
de traitements deviennent très longs...
Voici une approche possible (sans essayer d'optimiser quoi que ce
soit) :
dictionnaire =[ 'cab', 'ba', 'ccab' ]
def possible( mots, mes_lettres, longueur ):
'''Le mot a-t-il la longueur indiquée et les lettres de
"mes_lettres" sont-elles suffisantes pour former le mot ?'''
if len( mots )!= longueur: return False
for lettre in mots:
if mots.count( lettre )> mes_lettres.count( lettre ):
return False
return True
def mots_possibles( dictionnaire, mes_lettres, longueur ):
'''Tous les mots du dictionnaire qui ont la longueur indiquée et qui
peuvent être formés avec les lettres du « mes_lettres ».'''
résultat = []
for mots in dictionnaire:
if possible( mots, mes_lettres, longueur ):
résultat.append( mots )
return résultat
def mots_de_longueur_maximale( dictionnaire, mes_lettres ):
'''Trouve dans le dictionnaire des mots de longueur maximale qui
peuvent être formés avec les lettres indiquées.'''
for longueur in range( len( mes_lettres ), 1, -1 ):
résultat = mots_possibles( dictionnaire, mes_lettres, longueur )
if résultat: return résultat
return []
for mes_lettres in[ 'abc', 'ab', 'abx', 'axy' ]:
print( mots_de_longueur_maximale( dictionnaire, mes_lettres ))