Hilfe bei der Fehlersuche

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
ap24
User
Beiträge: 3
Registriert: Donnerstag 26. November 2015, 22:54

Huhuu, Ich habe hier so ein schönes Programm, dass folgendes können soll....

Im folgenden Python-Code wird eine Funktion
next_word(s)definiert, die ange-wendet auf einen Strings
ein Tupel(word, rest)zurückgibt, wobei word das erste
Wort (im Sinne der Erläuterung) in s ist und rest
die Zeichenfolge ist, die in s auf
word folgt. Falls s kein Wort enthält, gibt die Funktion das Tupel
(None, " ")zurück.

Die Definitionen enthalten einen syntaktischen, einen semantischen Fehler und einen
Fehler, der bei vielen (auch kurzen) Eingaben zur Laufzeit auftritt.
Ein Fehler befindet sich in einer Zeile.

Das programm sollte als docstring getestet werden habe es auch versucht im Python tutor..
bin da allerdings nicht weitergekommen...

Ich habe den syntaktischen Fehler gefunden er befindet sich in der Zeile
while s[0] not in LETTERS und es fehlt nach LETTERS ein : da man eine while schleife so
schreibt... ich dachte mir dass es noch ein Fehler bei der def _next_word_helper(s): gibt
da ich mir denke, dass man das 2 te if in der def das aufgerufen wird ein elif sein müsste
oder ??
Liegt der 3. fehler in dieser Zeile ? man muss ja nicht das wort ersetzen sondern es hinzufügen
oder ?
if word_rest:
word = word_rest
Kann mir jemand ganz dringend helfen ??


Vielen Dank


Code: Alles auswählen

import doctest

LETTERS = "abcdefghijklmnopqrstuvwxyz" + \
          "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + \
          "ÄÖÜäöüß"


def _next_word_helper(s):
    """Helper function for next_word."""
    if not s:
        return None, s
    if s[0] not in LETTERS:
        return None, s
    word = s[0]
    word_rest, s_rest = _next_word_helper(s[1:])
    if word_rest:
        word = word_rest
    return word, s_rest


def next_word(s):
    """Return the first word of an input string s and the rest of it.

    Args:
        s (str): The input string.

    Returns:
        (str or None, str): The first word and the rest of s.

    Examples:
        TODO: INSERT HERE!

    >>> next_word("hello world")
    ('hello, world')

    """
    # eat leading punctuation marks, white spaces, etc.
    while s[0] not in LETTERS
        s = s[1:] 
    return _next_word_helper(s)

if __name__== "__main__":
    doctest.testmod(verbose=True)
Zuletzt geändert von Anonymous am Donnerstag 26. November 2015, 23:14, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

@ap24: Wenn Du doch im Text schon Vermutungen äusserst was falsch sein könnte und wie es eigentlich heissen müsste, warum probierst Du das nicht aus?

Ist der vorhandene Testfall im DocString von Dir oder war der auch schon vorgegeben?
ap24
User
Beiträge: 3
Registriert: Donnerstag 26. November 2015, 22:54

ist vorgegeben. :D ich muss das allerdings richtig haben für meine nachfolgenden Uniaufgaben und da ich mir unsicher bin habe ich die Frage hier gestellt :D Falls du mir jetzt sagst: Du liegst ganz falsch .. lohnt es sich nicht an der Stelle weiterzumachen ... sollte dann lieber nach einem anderen Fehler suchen..

bin Anfängerin ich bin schon die ganze Zeit am ausprobieren, aber es kommt nicht das als Test heraus was ich haben möchte :/
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Zeile 34 ist bezüglich der restlichen Beschreibung falsch! (BlackJack fragte vermutlich deswegen nach dem Ursprung davon) Wenn das wirklich gegeben ist, dann enthält die Aufgabe einen Fehler... evtl. hast Du es aber auch falsch abgeschrieben oder editiert?

Schau Dir genau an, *was* da zurückgegeben wird!
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
BlackJack

@ap24: Ich fragte weil da ja vorher 'TODO: INSERT HERE!' in dem DocString steht. Du solltest über den Testfall auf jeden Fall mal nachdenken.

Ansonsten bin ich von der `_next_word_helper()` eher verwirrt, denn die sieht mir irgendwie komplett falsch aus, die würde ich wohl von Grund auf neu schreiben. Ich sehe da jedenfalls keinen *einfachen* Fix. Da müsste man dann wissen ob die Signatur so bleiben muss, oder ob man die auch anpassen darf, und ob die Lösung rekursiv sein muss oder ob man da auch etwas imperatives schreiben darf.

Edit: Okay, Kommando zurück: die `_next_word_helper()` ist doch einfach zu fixen. Du solltest auch noch ein paar mehr Testfälle hinzufügen.
ap24
User
Beiträge: 3
Registriert: Donnerstag 26. November 2015, 22:54

zeile 34 sieht wie folgt aus ('hello','world'). ich werde es mit noch weiteren Testfällen ausprobieren.

Leider darf man bei der Funktion def _next_word_helper(s): nur eine Zeile verbessern und ich habe das so gemacht indem ich in Zeile 17 word = word + wordrest eingesetzt habe dann kam zumindest als Testergebnis ein Tupel heraus der so so aussah ('hello', ' world') allerdings ist da das 3. Anführungszeichern um ein Leerzeichen vor dem world..
BlackJack

@ap24: Und was ist nun falsch? Die Funktion oder der Testfall? Mit Begründung! :-)
Antworten