Wie kann ich in Python die Zeile eines Wortes in einem Text ausgeben?
Schreiben Sie eine Funktion, welche in einem Text die erste Zeilennummer ausgibt, beginnend mit 1, in der ein gegebenes Wort verwendet wird. Es wir Null zurückgegeben, wenn das Wort nicht enthalten ist.
# Hinweis: mit "in" können sie auch testen, ob sich ein Wert in einer Liste befindet.
def line_number(wilhelm_tell, word):
"""Search for the given string in file and return lines containing that string,
along with line numbers"""
i = 0
list_of_results = []
return list_of_results
wilhelm_tell = """
Es lächelt der See, er ladet zum Bade,
Der Knabe schlief ein am grünen Gestade,
Da hört er ein Klingen,
Wie Flöten so süss,
Wie Stimmen der Engel
Im Paradies.
Und wie er erwachet in seliger Lust,
Da spülen die Wasser ihn um die Brust,
Und es ruft aus den Tiefen:
Lieb Knabe, bist mein!
Ich locke den Schäfer,
Ich zieh ihn herein.
"""
if __name__ == '__main__':
#
# Überprüfung Aufgabe 1a
#
print()
print("Aufgabe 1a")
words = ['erwachet', 'Brust', 'Wie', 'Ozean', 'Knabe']
for word in words:
num = line_number(wilhelm_tell, word)
if num > 0:
print(f"Das Wort {word} findet sich auf Zeile {num}.")
else:
print(f"Das Wort {word} wurde nicht gefunden!")
Output: IndentationError
Was soll ich machen?
1 Antwort
Zuerst einmal den Code richtig einzurücken, wäre ein sinnvoller Schritt. Denn das ist die aktuell angemerkte Fehlerursache (IndentationError).
Mit jedem neuen Code-Block wird der dazugehörige Quellcode um exakt vier Leerzeichen nach rechts eingerückt. Nach Beendigung des Blocks geht es wieder um vier Leerzeichen nach links.
Beispiel:
def add(numberOne, numberTwo):
result = numberOne + numberTwo
return result
sum = add(1, 3)
In folgenden Snippets werde ich der Bequemlichkeit halber ein Tab-Zeichen verwenden. Die solltest du bei dir wieder gegen die vier Leerzeichen eintauschen.
Das ist aber nicht der einzige Fehler.
1) Als Delimiter für den String wilhelm_tell solltest du einzelne Anführungszeichen verwenden. Drei Anführungszeichen hingegen dienen als Delimiter für mehrzeilige Kommentare.
wilhelm_tell = "\
Es lächelt der See, er ladet zum Bade,\
Der Knabe schlief ein am grünen Gestade,\
# etc. ...
"
Der Backslash am Ende jeder Zeile gibt dem Python Interpreter zu verstehen, dass es sich um einen mehrzeiligen String handelt.
Ich würde der Variable übrigens auch einen anderen Namen geben, der ihren Inhalt besser verdeutlicht. Z.B. wilhelm_tell_strophe. Auch bei den anderen Variablen sowie deiner Funktion würde ich empfehlen, nochmal zu schauen, ob sich nicht passendere Namen finden lassen.
2) Du gibst mit line_number eine Liste zurück und versuchst folgend, diese mit einer Zahl zu vergleichen. Das klappt natürlich nicht. Deine Funktion sollte eine Zahl (die Zeilennummer) zurückgeben.
3) Die Strophe sollte als Liste vorliegen, wobei jeder Eintrag einer Zeile entspricht. Dann kannst du den Index/die Zeilenummer einfacher ermitteln.
Entweder, du legst von Anfang an eine String-Liste an:
wilhelm_tell = [
"Es lächelt der See, er ladet zum Bade,",
"Der Knabe schlief ein am grünen Gestade,",
# ...
]
oder du trennst den String anhand von Trennzeichen auf. Man könnte bspw. konkrete Zeilenumbrüche (\n) setzen und dann den String mit splitlines zerlegen.
wilhelm_tell = "\
Es lächelt der See, er ladet zum Bade,\n\
Der Knabe schlief ein am grünen Gestade,\n\
# etc. ...
"
4) Um Wörter in der Liste zu suchen, müsstest du über diese iterieren und, wie es der Tipp für die Aufgabe schon rät, mit dem in-Operator prüfen, ob sich das gesuchte Wort in einer der Einträge befindet. Wenn nichts gefunden wird, sollte ein negativer Wert zurückgegeben werden.
Falls du nicht weißt, wie man eine Schleife mit Zähler laufen lassen kann, hier ein kurzes Beispiel:
for index, letter in enumerate("Hello"):
print(index, letter)
Den Startwert für index kann man mit der enumerate-Funktion festlegen. Dafür gibt es den benannten Parameter start.
5) Gleiche noch einmal deine Rückgaben in der Konsole mit den Anforderungen der Aufgabenstellung ab.