Zum ausführen mehrerer Funktionen in Ordnung?

Sollte dies ein leichtes für erfahrene Programmierer da draußen... ich bin ein Programm schreiben, dass sich die Ausgaben anagramme (aus einer übergebenen Liste) von einem Durcheinander Eingang. Ich glaube, mein code beinhaltet alle notwendigen Funktionen zu produzieren das gewünschte Ergebnis, aber ich kann nicht herausfinden, wie man das Programm ausführen der jeweiligen Funktionen in Ordnung. Ein Beispiel für die Ausgabe ist:

Please enter a jumbled word: lsitNe
Your words are:
silent
listen
enlist
tinsel

Dies ist meine Ausgabe, aktuell:

  Please enter a jumbled word: dff
Traceback (most recent call last):
  File "/Users/edinnerman/Desktop/poop.py", line 53, in <module>
    main()
  File "/Users/edinnerman/Desktop/poop.py", line 5, in main
    yay_anagrams = anagramlist(lword)
NameError: name 'lword' is not defined

Wie kann ich neu formatieren mein code zur Ausgabe aller anagramme aufgelistet in einer text-Datei erhält eine user-Eingabe?
Hier ist mein code:

 #0: Create a main function to bring all functions together for the output.
def main():
    textfile = open('words.txt', 'r').read()
    dictionary_of_words = filename(textfile)
    yay_anagrams = anagramlist(lword)
    double_whammy = binary_search(fresh_list, ltextfile)
    answer = output()

#1, 2: Take a filename as a parameter and ask user for word to unjumble. Lowercase all.
def filename(textfile):
    ltextfile = textfile.lower()
    scrambled_eggs = input("Please enter a jumbled word: ")
    lword = scrambled_eggs.lower()

#3: Create an anagram list (already lowercase) for the jumbled word.
def anagramlist(lword):
    if lword == "":
        return([lword])
    else:
        yay_word = lword[1:]
        first_letter = lword[0]
        fresh_list = []
        for mixed_word in filename(yay_word):
            for pos in range(len(mixed_word) + 1):
                fresh_list.append(mixed_word[:pos] + first_letter[0] + mixed_word[pos:])
            return fresh_list

#4: Check if any words in anagram list match dictionary list.
def binary_search(fresh_list, ltextfile):
    for eachword in fresh_list:
        low = 0
        high = len(list) - 1 
    while low <= high:
        mid = (low + high)//2
        item = list[mid]
    if fresh_list == item:
        return True
    elif fresh_list < item:
        high = mid - 1
    elif fresh_list > item:
        low = mid + 1
    return False

#5: Print appropriate statements.
def output():
    if fresh_list == True:
        newlist = set()
        for item in fresh_list:
            newlist.add(item)
        print("Your words are:/n", newlist)
    if fresh_list == False:
        print("Your word cannot be unjumbled.")       
main()

Bitte entschuldigen Sie einige der kleineren Codierung Fehler, die ich vielleicht in diesen code.

  • Bitte gehen Sie durch die tutorial-Sektion, die auf Funktion definition erste um einige Beispiele über die Funktion Definitionen. Verwenden Sie Variablen, die nicht definiert sind alle über den Ort, zuweisen von Variablen für die Rückgabewerte von Funktionen, die nicht wieder alles haben, und dann nie verwenden die Ihnen zugewiesenen Werte wieder. Ich nehme an, dies ist eine Art von Hausaufgaben/Zuordnung. Könnte man nicht mit etwas beginnen, das einfacher? Oder, wenn nicht, versuchen zu implementieren, die eine der Funktionen, damit es funktioniert, und dann bewegen auf die nächste?
  • Du bist nicht weit Weg, aber es gibt einige grundlegende Konzepte, die Ihnen fehlen (siehe @Carsten Kommentar). In Bezug auf die Frage, die hier (und Debuggen für sich selbst) "der shell beendet das Programm nach der Eingabe" ist nicht sehr informativ. Was eigentlich happends, ich denke, ist, dass Sie einen Fehler erhalten: NameError: global name 'lword' is not defined - und eine Zeilennummer. Für eine Frage hier - am besten kopieren Sie die gesamte Nachricht (einschließlich der Traceback). Auch für Ihre debugging - es gibt Ihnen den ersten Hinweis - Python nicht weiß, was lword ist in Zeile 5...
  • Sie möchten möglicherweise verwenden Sie PyCharm (oder ein ähnliches tool). Es ist sehr leicht zu erkennen Fehler in Ihrem code. Dann könnte man mit der Maus über die problematischen Teile des Codes, und Lesen Sie, was falsch ist.
  • danke für den link! Ich kann nicht sagen, ob ich brauchte, um Dekorateure oder ähnliches, so dass die Beratung ist sehr geschätzt. @J Richard Snape, ich fügte hinzu, dass in der Frage-immer noch lernen, wie man Fragen zu stellen, angemessen auf Stackoverflow (danke!). Die Arbeit an meinem code, und werde, wenn ich die Lösung haben. Vielen Dank für die Hilfe!
  • Sicher haben Sie einen Blick auf die Antwort unten. Wenn es hilft und bringt Sie vorbei diese Fehler - fühlen Sie sich frei, Sie zu akzeptieren. Wenn es führt zu neuen Fehlern - ich würde Ihnen empfehlen, sich eine neue Frage, die über jene, als zu versuchen, Sie zu Sortieren Sie alle aus in diesem thread (Fehler in der Logik innerhalb der Funktion ganz ein anderes problem, um die Fehler im Programm-Ablauf, die wir bekämpfen hier).
  • Übrigens - sehr unwahrscheinlich, dass Sie brauchen, Dekorateure und fortgeschritteneren Konstrukte, die mit dieser Art von code. Ich werde noch einmal auf die Allgemeine Bemerkung in meiner Antwort - einfach starten! Viel Glück!
  • Es gibt einige grundlegende Probleme mit Ihrem Python-code und Programmlogik. Richard ' s Antwort beschreibt einige dieser Grundlagen, aber auch wenn Sie fixieren Sie diese Dinge in Ihrem Programm, es finden nicht alle anagramme für einen input-Wort, seit Ihr anagramlist() Funktion erzeugt nur ein kleiner Bruchteil aller möglichen Permutationen der Eingabe-Wort. OTOH, wenn Sie verändert, dass die Funktion so dauerte es auch Generierung aller Permutationen, Ihr Programm wäre sehr ineffizient - es gibt eine viel bessere Strategie für die Suche nach Anagrammen.
  • Als Richard erwähnt, die Sie brauchen, um ein besseres Verständnis der verschiedenen Python und die Allgemeinen Programmier-Grundlagen. Bis Sie das tun, werden Sie nicht die Kodierung Fähigkeiten, die erforderlich sind, dies zu schreiben, Anagramm-Programm. Ich versuche nicht, Euch zu entmutigen - ganz im Gegenteil, aber wir können Sie nicht lehren Sie die Grundlagen der Programmierung auf Stackoverflow (oder anderen Stack-Exchange-Standorte), diese Aufgabe ist nicht geeignet, um diese Frage-und-Antwort-format. Aber wir können Ihnen ein paar Tricks & Tipps...
  • Egal, ob Sie die Teilnahme an einem Programmier-Kurs, oder der Unterricht selbst durch ein Lernprogramm durcharbeiten, müssen Sie alle die Programmierung der übungen, und nicht vorwärts zu bewegen, um die nächste Stufe, bis Sie verstehen, den aktuellen Schritt. Sowie den zugeordneten übungen ist es sehr hilfreich, zu schreiben, sehr viele kleine Programme, die sich auf ein oder zwei grundlegende Dinge in einer Zeit, mit viel Druck-Anweisungen, so können Sie genau verfolgen, was passiert bei jedem Schritt. Frohes Programmieren!
  • Ja, kann dem nur Zustimmen mit allem, was @PM2Ring sagt. Ich werde noch einmal wiederholen - wir würden nicht wollen, um Sie aus dem Programmier -, sondern gehen für viele, viele einfache Programme, viele print-Anweisungen, verfolgen, was passiert, Zeile für Zeile auf den ersten (ich immer noch tun, wenn ich hit-Probleme habe, war die Programmierung ein-und ausschalten, ähem, 25 Jahre+ ...). Spaß haben!

InformationsquelleAutor Emily | 2015-03-16
Schreibe einen Kommentar