Deutsch   English   Français   Italiano  
<recherche-20231128131821@ram.dialup.fu-berlin.de>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!fu-berlin.de!uni-berlin.de!not-for-mail
From: ram@zedat.fu-berlin.de (Stefan Ram)
Newsgroups: fr.comp.lang.python
Subject: Re: Tricher au scrabble...
Date: 28 Nov 2023 12:22:24 GMT
Organization: Stefan Ram
Lines: 49
Expires: 1 Dec 2024 11:59:58 GMT
Message-ID: <recherche-20231128131821@ram.dialup.fu-berlin.de>
References: <uk4fm4$852n$1@dont-email.me>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Trace: news.uni-berlin.de NVHTlKOZ5LYybsas7LhoLw8BD6DaX2QwrIv9/Y6nOY+akZ
Cancel-Lock: sha1:dCMTaIj6WkWhrQoGuF0Ns036C+4= sha256:dHqb9ejGGSSmK5z2hkR7B1cGs4wFPK4w+5ed5HA4c+Q=
X-Copyright: (C) Copyright 2023 Stefan Ram. All rights reserved.
	Distribution through any means other than regular usenet
	channels is forbidden. It is forbidden to publish this
	article in the Web, to change URIs of this article into links,
        and to transfer the body without this notice, but quotations
        of parts in other Usenet posts are allowed.
X-No-Archive: Yes
Archive: no
X-No-Archive-Readme: "X-No-Archive" is set, because this prevents some
	services to mirror the article in the web. But the article may
	be kept on a Usenet archive server with only NNTP access.
X-No-Html: yes
Content-Language: fr-FR
Accept-Language: de-DE-1901, en-US, it, fr-FR
Bytes: 3381

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 ))