Python : Fonction d'anagrammes
Discutez d'informatique ici !
-
vizcaronbis
- Messages: 3
- Enregistré le: 25 Mai 2015, 14:06
-
par vizcaronbis » 28 Mai 2015, 14:20
Bonjour,
Je travaille actuellement sur cette fonction qui sert à decomposer un mot et affiche ses anagrammes. Je comprend cependant pas comment elle fonctionne.
Si quelqu'un pourrait m'éclairer sur son fonctionnement, ce serait vraiment utile !
from math import*
def anagrammes(mot):
anagramme=['']
for c in set(mot):
for _ in range (mot.count(c)):
anagramme = [s[:k+1]+c+s[k+1:] for s in anagramme for k in range (s.rfind(c),len(s))]
return anagramme
-
Rockleader
- Habitué(e)
- Messages: 2126
- Enregistré le: 11 Oct 2011, 19:42
-
par Rockleader » 28 Mai 2015, 15:55
Première chose: Indente ton code
Je connais pas python, mais je ne pense pas que faire une affectation et deux boucles for sur une même ligne ça soit une bonne pratique
(Maintenant si c'est une spécificité de python, bah je ferme ma gueule et j'espère ne jamais devoir le pratiquer :ptdr: )
Pour revenir à ton problème.
Première question que tu dois te poser:
Qu'est ce qu'un anagramme ?
Ce sont des mots dont tu inverse les lettres
Par exemple chien et chine
Construire tous les anagrammes possible à partir de ce principe là c'est assez facile, il suffit en fait d'explorer l'ensemble des combinaisons pour tes n lettres de mot. (J'imagine que c'est ce que fait cette fonction).
Pour le mot ab, il y a un anagramme ba
Pour abc, il y a: acb , bac, bca, cab, cba
Maintenant s'il faut que les mots que tu trouves possède une signification là, ça dépasse mes compétences...
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !
-
joel76
- Membre Relatif
- Messages: 230
- Enregistré le: 11 Fév 2013, 16:31
-
par joel76 » 28 Mai 2015, 17:13
Je pense que pour bien comprendre cette fonction, il faut que tu en comprennes chaque détails.
Je ne connais pas ton niveau, mais
- tu as compris set(mot) ? (essaye set('ab') puis set('abab')
- mot.count(c) me parait clair
- s étant un mot de anagrammes, tu comprends s[:k+1] et set[k+1 :] ?
- la concaténation par + est simple
- la double boucle for s in anagrammes for k in range(s.rfind(c), len(s) ? On prend d'abord un mot de l'ancien anagrammes puis, on rajoute une lettre du mot c à toutes les places possibles (poses-toi la question pourquoi pas range(len(s)) ?).
- a chaque tour de boucle, on reprend la liste anagrammes obtenue au tour précédent, d'ou l'initialisation avec un mort vide '' au début.
Tu peux toujours "rajouter un debug" print(anagrammes) après la fameuse ligne anagramme = [s[:k+1]+c+s[k+1:] for s in anagramme for k in range (s.rfind(c),len(s))]
PS oublier les indentations quand on travaille en Python, il faut le faire ! :marteau:
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités