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