IndentationError: expected an indented block

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
uek
User
Beiträge: 3
Registriert: Sonntag 15. November 2020, 16:33

Hallo,

ich bin mit Python noch völlig unerfahren und auch kein Programmierer, weshalb ich derzeit versuche im openHPI Forum die Grundzüge zu erlenen. Leidere sind Kommentaranfragen zu den Aufgaben dort oft nicht zielführend und verständlich, weil sie von Mitkommilitonenn beantwortet werden . Daher wende ich mich nun hilfesuchend an euch Profis:
Das ist die Aufgabe

Python20 Aufgabe 2.6.2
Auf dem letzten Zettel, den sie finden, steht der folgende Satz: "Du Suchender hast Mut und wirst die linke Allee nicht einschlagen sondern den Schatz entdecken sonst haben wir ihn gefunden". Zusätzlich befindet sich eine Anweisung darauf: Gib nur die Wörter aus, die an der zweiten Stelle (Index = 1) ein „e“ enthalten oder eine gerade Anzahl an Buchstaben verwenden. Kannst du den Freunden helfen?

Tipp 1: Um zu überprüfen, ob ein Wort eine gerade Anzahl an Buchstaben besitzt, könnt ihr die Funktion buchstabenanzahl_ist_gerade(wort) aus der Bibliothek funktionen verwenden. Dieser übergebt ihr einen String und erhaltet dann einen Boolean zurück, der euch sagt, ob der String eine gerade oder ungerade Anzahl an Buchstaben hatte. Für den Aufruf buchstabenanzahl_ist_gerade("Beispiel") wäre das also True.

Tipp 2: Es könnte hilfreich sein, den Satz zunächst in eine Liste zu zerlegen.


So dachte ich mir in etwa die Lösung:

Code: Alles auswählen

from funktionen import buchstabenanzahl_ist_gerade

satz = "Du Suchender hast Mut und wirst die linke Allee nicht einschlagen sondern den Schatz entdecken sonst haben wir ihn gefunden"

liste = satz.split()
wort = liste
while liste:
    if wort[1] == "e":
    elif buchstabenzahl_ist_gerade(wort)     == True:
    print(wort)
Frage 1 was genau bedeutet die Fehlermeldung

Code: Alles auswählen

  IndentationError: expected an indented block
in dem Kontext?

Frage 2 kann ich die beiden if Abfragen mit OR erknüpfen , falls ja wie muss ich das schreiben?

DANKE schonmal im voraus und Angsbe der Zeilennummer wäre echt nett.

Gruss

uek
Benutzeravatar
__blackjack__
User
Beiträge: 14053
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@uek: Zu deutsch: Es wird ein eingerückter Block erwartet. Beschreib doch mal in Worten was Du hier erwartest was Python machen soll falls ``wort[1] == "e"`` wahr ergibt? Wo steht das im Code was dann passieren soll? Und woher weiss Python wo das was in dem Fall passieren soll anfängt und wo es endet?

Die wievielte Aufgabe ist das denn? Das benutzt ja schon recht viel an Kontrollstrukturen, und da müsstest Du doch eigentlich schon wissen welche Bedeutung das Einrücken von Code in Python hat und dass das *wichtig* ist.

Was soll ``wort = liste`` bedeuten? Was enthält die Liste? Passt der Wert wirklich zu dem Namen `wort`? Bei `wort` würde man ja erwarten, dass der Wert ein Wort ist.

`liste` ist kein besonders guter Name. Verwende Namen die die Bedeutung der Werte verraten und nicht den allgemeinen, recht nichtssagenden Datentyp.

Was bedeutet die Bedingung der ``while``-Schleife? Wann wird die jemals unwahr? Was willst Du da eigentlich machen?

Ja man kann die Bedingungen verknüpfen. Eine Idee wie das Schlüsselwort heissen könnte hast Du anscheinend auch. Was funktioniert konkret nicht?

Man vergleicht nicht mit literalen Wahrheitswerten. Bei einem Vergleich mit ``== True`` bekommst Du `True` falls Du sowieso schon `True` hattest und `False` falls Du `False` hattest. Da wird nur der Ausdruck unnötig aufgeblasen und Rechenzeit für einen Vergleich verbraucht der nichts am Ergebnis ändert.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
__blackjack__
User
Beiträge: 14053
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ich kaufe ein "e" und möchte lösen:

Code: Alles auswählen

satz = "Du Suchender hast Mut und wirst die linke Allee nicht einschlagen
  sondern den Schatz entdecken sonst haben wir ihn gefunden"

länge_ist_gerade = text -> len text % 2 == 0

satz.split! |> filter (wort -> snd wort == "e" or länge_ist_gerade wort) |> " ".join |> print
Ausgabe:

Code: Alles auswählen

Du hast den Schatz gefunden
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten