Python : Fonction d'anagrammes

Discutez d'informatique ici !
vizcaronbis
Messages: 3
Enregistré le: 25 Mai 2015, 14:06

Python : Fonction d'anagrammes

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



Avatar de l’utilisateur
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:

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite