Python Anagram Finder aus der angegebenen Datei

Ich habe absolut alles unter der Sonne ausprobiert, um das herauszufinden und nichts zu bekommen. Ich bin nicht einmal sicher, wie ich das Problem anspreche. Die Anweisungen sind wie folgt …

Ihr Programm fragt den Benutzer nach dem Namen der Datei mit der Liste der Wörter. Die Wortliste ist formatiert, um ein Wort auf jeder Zeile zu haben. • Für jedes Wort finden Sie alle Anagramme (einige haben mehr als eins) dieses Wortes. • Ausgabe: Melden Sie, wie viele Wörter 0, 1, 2, etc. haben, Anagramme. Ausgabe der Liste der Wörter, die die meisten Anagramme bilden (wenn es mehrere Sätze mit der gleichen maximalen Länge gibt, geben sie alle aus). • Es wird erwartet, dass Sie eine geeignete funktionale Zersetzung verwenden.

Bitte beachten Sie, dass ich schon seit knapp einem Monat programmiert habe, so dumm alles so weit wie möglich. Danke im Voraus.

One Solution collect form web for “Python Anagram Finder aus der angegebenen Datei”

Ich nehme es, das ist Hausaufgaben. Sie wissen, dass Anagramme nur Permutationen eines Wortes sind. Nehmen Sie die Dinge langsam: lernen, wie man Anagram für ein Wort zu berechnen, bevor Sie lernen, wie man es für viele Worte zu tun. Die folgende interaktive Sitzung zeigt, wie man ein Anagramm eines Wortes berechnet. Du kannst von dort aus gehen.

>>> # Learn how to calculate anagrams of a word >>> >>> import itertools >>> >>> word = 'fun' >>> >>> # First attempt: anagrams are just permutations of all the characters in a word >>> for permutation in itertools.permutations(word): ... print permutation ... ('f', 'u', 'n') ('f', 'n', 'u') ('u', 'f', 'n') ('u', 'n', 'f') ('n', 'f', 'u') ('n', 'u', 'f') >>> >>> # Now, refine the above block to print actual words, instead of tuple >>> for permutation in itertools.permutations(word): ... print ''.join(permutation) ... fun fnu ufn unf nfu nuf >>> # Note that some words with repeated characters such as 'all' >>> # has less anagrams count: >>> word = 'all' >>> for permutation in itertools.permutations(word): ... print ''.join(permutation) ... all all lal lla lal lla >>> # Note the word 'all' and 'lla' each repeated twice. We need to >>> # eliminate redundancy. One way is to use set: >>> word = 'all' >>> anagrams = set() >>> for permutation in itertools.permutations(word): ... anagrams.add(''.join(permutation)) ... >>> anagrams set(['lal', 'all', 'lla']) >>> for anagram in anagrams: ... print anagram ... lal all lla >>> # How many anagrams does the word 'all' have? >>> # Just count using the len() function: >>> len(anagrams) 3 >>> 

Ich habe die oben genannte Session hier für Ihre Bequemlichkeit eingefügt.

Aktualisieren

Jetzt mit Aarons Klärung. Das Problem auf der untersten Ebene ist: Wie bestimmen Sie, ob zwei Wörter Anagramme sind? Die Antwort lautet: "Wenn sie die gleiche Anzahl von Briefen haben." Der einfachste Weg (für mich) ist, alle Buchstaben zu sortieren und sie zu vergleichen.

 def normalize(word): word = word.strip().lower() # sanitize it word = ''.join(sorted(word)) return word # sort_letter('top') ==> 'opt' # Are 'top' and 'pot' anagrams? They are if their sorted letters are the same: if normalize('top') == normalize('pot'): print 'they are the same' # Do something 

Nun, da Sie wissen, wie man zwei Wörter vergleicht, lasst uns an einer Liste von Wörtern arbeiten:

 >>> import collections >>> anagrams = collections.defaultdict(list) >>> words = ['top', 'fun', 'dog', 'opt', 'god', 'pot'] >>> for word in words: ... anagrams[normalize(word)].append(word) ... >>> anagrams defaultdict(<type 'list'>, {'opt': ['top', 'opt', 'pot'], 'fnu': ['fun'], 'dgo': ['dog', 'god']}) >>> for k, v in anagrams.iteritems(): ... print k, '-', v ... opt - ['top', 'opt', 'pot'] fnu - ['fun'] dgo - ['dog', 'god'] 

In der oben genannten Session verwenden wir Anagramme (ein defaultdict, das ist das gleiche wie dict mit Standardwerten), um die Liste der Wörter zu speichern. Die Schlüssel sind die sortierten Buchstaben. Das bedeutet, anagrams['opt'] ==> ['top', 'opt', 'pot'] . Von dort aus können Sie sagen, welche die meisten Anagramme hat. Der Rest sollte einfach genug sein.

Python ist die beste Programmiersprache der Welt.