Wieso wird kein True und False zurückgegeben(Python)?
def letter_check(word, letter):
for i in word:
if i == letter:
return True
return False
letter_check("strawberry", "a")
letter_check("strawberry", "o")
5 Antworten
Wieso wird kein True und False zurückgegeben(Python)?
Weil bei Python die Einrückung wichtig ist ...
Deine Funktion ruft eine Schleife auf.
In dieser Schleife wird in jeder Iteratoin zuerst geprüft, ob der aktuelle Buchstabe letter entspricht. Wenn das nicht der Fall sein sollte, wird direkt "False" zurückgegeben, weil das auch zur Schleifeniteration gehört.
Das ganze ist, so wie du es geschrieben hast, äquivalent hierzu:
for i in word:
if i == letter:
return True
else:
return False
Es wird also direkt in der ersten Iteration False zurückgegeben, sollte der erste Buchstabe nicht schon dem gesuchten Buchstaben entsprechen
Das ganze lässt sich auch einfacher und unkomplizierter schreiben - einfach per "return letter in word"
achso also sollte ich lieber if i != letter: return false? machen
das ändert nichts am Sachverhalt, dass deine Einrückung nicht stimmt.
Nimm das "return False" einfach aus der Schleifeniteration heraus und lass es nach der Schleife ausführen ...
aja, habs jetzt.
Bisschen ungewohnt die elifs und else hinten dem if zu rücken.
Danke dir
Bisschen ungewohnt die elifs und else hinten dem if zu rücken.
auch nicht anders als bei anderen Sprachen. Dort werden halt Klammern zum Differenzieren der einzelnen Blöcke genutzt, bei Python Einrückungen
Fehlerhafte Einrückung:
def letter_check(word, letter):
for i in word:
if i == letter:
return True
return False
allerdings würde ich das ja so machen:
def letter_check(word, letter):
return letter in word
Oder um es anders auszudrücken, die Funktion ist überflüssig.
Probiere mit deinem Code mal
letter_check("strawberry", "s")
aus. Vielleicht fällt dir dann was auf.
Auf den ersten Blick nur, wenn die for-Schleife nicht durchlaufen wird.
PS: Ich habe nur die Funktion betrachtet. Anscheinend war die Frage, weshalb die beiden Funktionsaufrufe zusammen nicht einmal True und einmal False hervorrufen. Meine Unachtsamkeit...
du kannst die Funktion etwas simpler schreiben:
def letter_check(word, letter):
return letter in word
Deine Version funktioniert nicht, da das "return False" in jedem Durchlauf der for-Schleife aufgerufen wird, weil es zu weit eingerückt ist.
Funktionieren würde auch:
def letter_check(word, letter):
for i in word:
if i == letter:
return True
return False
achso also sollte ich lieber if i != letter: return false? machen
#Edit Klappt auch nicht