python function while schleifen Problem?

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"]:
Woher ich das weiß:Hobby – Programmieren ist mein Hobby & Beruf

ichbin111 
Fragesteller
 19.04.2022, 15:02

Gibt es einen Operator der dort passen würde oder halt etwas wie ein sprachliches Oder?

0
MrAmazing2  19.04.2022, 15:03
@ichbin111

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.

1
x != "False" or "True"

wird folgendermaßen geklammert:

((x != "False") or ("True"))

Daraus resultiert wohl der Fehler.


ichbin111 
Fragesteller
 19.04.2022, 14:49

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.

0
Destranix  19.04.2022, 14:50
@ichbin111

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.

2
gfntom  19.04.2022, 14:52
@Destranix

"Beratungsresistenz" nennt man da. ich habe es auch schon versucht ...

2
Destranix  19.04.2022, 14:54
@gfntom

Ne, ich denke er hatte nur noch nicht verstanden. Vielleicht hat es ja jetzt "klick" gemacht?

1
MrAmazing2  19.04.2022, 14:58
@ichbin111

Nein, das bedeutet dein Code nicht.

Dein Code ist gleichbedeutend zu

((x != "False") or ("True"))
0
ichbin111 
Fragesteller
 19.04.2022, 14:59
@gfntom

Stimmt ich bin "Beratungsresistenz" deswegen habe ich auf GuteFrage.net nach Hilfe gesucht. lol?

Trotztem Danke euch beiden :p

1
gfntom  19.04.2022, 15:20
@ichbin111

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.

2

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


ichbin111 
Fragesteller
 19.04.2022, 14:47

Nein, der Code bedeutet sozusagen: Solange x nicht "False" oder "True" ist soll der Benutzer aufgefordert werden nochmal etwas einzugeben.

0
gfntom  19.04.2022, 14:51
@ichbin111

Sag ich ja: das ist es NICHT, was der Ausdruck auswertet. Hab meine Antwort ergänzt.

2
Von Experte MrAmazing2 bestätigt

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"):