Wieso wird kein True und False zurückgegeben(Python)?

5 Antworten

Vom Fragesteller als hilfreich ausgezeichnet
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"

Woher ich das weiß:Studium / Ausbildung – Abgeschlossenes Studium der Informatik (B.Sc.)
python1noob 
Fragesteller
 17.09.2022, 00:33

achso also sollte ich lieber if i != letter: return false? machen
#Edit Klappt auch nicht

0
xxxcyberxxx  17.09.2022, 00:35
@python1noob
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 ...

0
python1noob 
Fragesteller
 17.09.2022, 00:40
@xxxcyberxxx

aja, habs jetzt.
Bisschen ungewohnt die elifs und else hinten dem if zu rücken.
Danke dir

0
xxxcyberxxx  17.09.2022, 00:44
@python1noob
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

0

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.

wunschname0302  17.09.2022, 00:43

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...

0

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
python1noob 
Fragesteller
 17.09.2022, 00:40

Danke!

0