python function while schleifen Problem?
def test():
x = None
while x != "False" or "True":
x = input("True or False: ")
for i in x:
print("It is ")
print(x, end="")
test()
Wieso funktioniert dieser Code nicht, das Problem liegt darin das man nicht mehr aus der while Schleife raus kommt.
4 Antworten
"or" ist kein "oder" im Sprachlichen Sinne, sondern ein Logisches Oder.
Heißt:
Wenn die Bedingung links davon oder die Bedingung rechts davon True ist, dann kommt insgesamt True raus.
Deine "Bedingung rechts davon" ist einfach nur das Wort "True". Deshalb kommt beim Oder insgesamt immer ein True raus, denn der String wird immer als Wahr gewertet.
Du brauchst entweder
while x!="False" and x!="True":
oder
while x not in ["False","True"]:
Ein normales logisches UND (sodass die Schleife nicht mehr wiederholt wird, sobald eines davon falsch wird), aber halt ausführlich auf beiden Seiten die Bedingung hinschreiben.
Ja, eine Art "sprachliches Oder" geht auch, mithilfe einer Liste. "Wenn x nicht in der Liste dieser Möglichkeiten ist [Möglichkeit1, Möglichkeit2], dann ..."
Hab beide möglichen Codes ergänzt.
x != "False" or "True"
wird folgendermaßen geklammert:
((x != "False") or ("True"))
Daraus resultiert wohl der Fehler.
Nein, der Code bedeutet sozusagen: Solange x nicht "False" oder "True" ist soll der Benutzer aufgefordert werden nochmal etwas einzugeben.
Man kommt aber auch wenn man den Richtigen Wert eingibt nicht aus der Schleife raus.
Ich habe dir geschrieben, was da steht. Wi8e du richtig erkannt hast, ist das nicht, was du eigentlich wolltest. Entsprechend solltest du deinen Code anpassen.
"Beratungsresistenz" nennt man da. ich habe es auch schon versucht ...
Nein, das bedeutet dein Code nicht.
Dein Code ist gleichbedeutend zu
((x != "False") or ("True"))
Du hast zwei mal die korrekte Antwort bekommen und beide Male erklärt, dass diese falsch sei ("Nein, der Code ...").
Wenn man da nicht Beratungsresistenz vermuten darf ...
Ich sage ja nicht, dass es so sein muss - nur dass du dich über die Vermutung nicht wundern darfst.
Ich bin in Python nicht so firm, aber so
x != "False" or "True":
fragt man nicht ab, ob x (nicht) "False" oder "True" ist.
Was hier meiner Meinung nach passiert:
Es wird überprüft, ob x<>"False" ist. Das logische Ergebnis davon wird ODER-Verknüpft mit dem Wert "True". Da der String "True" <> 0 ist wird er als (logischer Wert) true interpretiert. Der Ausdruck liefert also immer true
Nein, der Code bedeutet sozusagen: Solange x nicht "False" oder "True" ist soll der Benutzer aufgefordert werden nochmal etwas einzugeben.
Sag ich ja: das ist es NICHT, was der Ausdruck auswertet. Hab meine Antwort ergänzt.
Wenn du schreibst
while x != "False" and x != "True":
dann macht es wahrscheinlich das, was du mit deinem Code beabsichtigst
Alternativ
while not x in ["False","True"]:
oder
while not (x == "False" or x == "True"):
Gibt es einen Operator der dort passen würde oder halt etwas wie ein sprachliches Oder?