2016-05-13 14 views
1

Ich muss eine Textdatei nach Anagrammen eines bestimmten Wortes durchsuchen. Die Textdatei hat ein Wort pro Zeile. Bis jetzt habe ich es geschafft, eine Funktion zu schreiben, die aus einem gegebenen Wort ein Wörterbuch macht, wobei der Schlüssel ein Buchstabe im Wort ist, und sein Wert ist die Anzahl der Male, die der Buchstabe im Wort ist. Die zweite Funktion durchläuft jede Zeile der Textdatei, erstellt ein zweites Wörterbuch derselben Schlüssel und Werte und vergleicht die beiden. Wenn die beiden gleich sind, fügt die Funktion dieses Wort zu einer Liste hinzu. Sobald die Funktion das Durchlaufen der Textdatei beendet hat, sollte sie die Liste der Anagramme drucken, aber sie druckt eine leere Liste. Hier ist mein Code, ich habe keine Ahnung, wo es falsch läuft.Wie suche ich eine Textdatei nach Anagrammen eines gegebenen Wortes

Dies ist für das Erstellen des Wörterbuchs des angegebenen Wortes.

word= input("Enter a word: ") 
letterdict = {} 

def count_letters(word,letterdict): 
    for letter in word: 
     letterdict[letter] = letterdict.get(letter,0) + 1 
    return letterdict 

print(count_letters(word,letterdict)) 

dies ist für durch die Textdatei Looping und

def search(): 
    count_letters(word,letterdict) 
    anagrams = [] 
    letterdict2={} 
    f = open('EnglishWords.txt', 'r') 
    for letter in f: 
     letterdict2[letter] = letterdict2.get(letter,0) + 1 
     if letterdict == letterdict2: 
      anagrams.append[f] 
     letterdict2.clear() 
    f.close() 
    anagrams.sort() #put list in alphabetical order 

    return print(anagrams) 

search() 
+0

'für Buchstaben in f' ergibt Zeilen, keine Buchstaben – robyschek

Antwort

0

Das sieht wie ein Problem der nicht mit dem global Schlüsselwort Zugang (und schreiben) die letterdict Sie erstellen zu vergleichen. Deklarieren Sie Ihre Variablen lokal und übergeben Sie sie mithilfe von Funktionsparametern durch Ihr Programm. Python bietet keine starke globale Variable Unterstützung (es ist da, aber viel Aufmerksamkeit auf Details zu verwenden).

Betrachten Sie Ihre Funktionen Umschreiben:

def count_letters(word): 
    letterdict = dict() 
    for letter in word: 
     letterdict[letter] = letterdict.get(letter,0) + 1 
    return letterdict 

def search(word): 
    letterdict = count_letters(word) 
    anagrams = [] 
    letterdict2={} 
    with open('EnglishWords.txt', 'r') as f: 
     for line in f: 
      for letter in line: 
       letterdict2[letter] = letterdict2.get(letter,0) + 1 
       if letterdict == letterdict2: 
        anagrams.append[line] 
       letterdict2.clear() 
    anagrams.sort() #put list in alphabetical order 

return anagrams 

ein paar Notizen über die Original-Code:

  • return print(anagrams) wahrscheinlich nicht alles tun und scheint wie ein Syntaxfehler in Ihrem Code.
  • for letter in f: Lasten Zeilen der Datei zu letter
  • count_letters(word,letterdict) tut nichts mit dem berechneten Wert
  • Sie können/wollen nicht letterdict
3

Viel schneller Algorithmus (innerhalb der in Ihren Räumen und Zahlen enthalten Schleife): Gehen Sie einmal durch Ihr gesamtes Wörterbuch und erstellen Sie eine neue Datei mit zwei Wörtern in jeder Zeile; das erste ist das Wort mit seinen Buchstaben alphabetisiert, und dann das Wort selbst, zum Beispiel:

aaadkrrv aardvark 
aabcsu abacus 
. . . 

Dann sortiert diese Datei. Nun, nach allen Anagrammen eines Wortes zu suchen, ist ein einfaches direktes Nachschlagen in eine sortierte Liste.

+0

Sie haben eine Verbesserung für den immer guten Rat verdient, es beim ersten Mal richtig zu machen. – Aaron3468

+0

@Lee Ich hätte mehr angeben sollen, frühe Studenten haben nicht viel Freiheit, wenn es darum geht, ihre Programme zu schreiben. "Mach es einfach so, wie wir es in der Klasse gemacht haben", gibt dir Noten. Allerdings ist der Algorithmus, den du mir gegeben hast, bei weitem besser, ich hätte das benutzt, wenn ich nicht meine Einschränkungen hätte. –

+0

@Lee das ist so lächerlich einfach, dass sein Genie! –

Verwandte Themen