Python: if-Schleife mit mehreren or-Bedingungen


blck

Mitglied
Hallo,
bin in Python noch nicht so fit. Die folgende if-Bedingung macht mir im Moment Probleme. Sieht nicht schön aus, muss aber der Nutzerfreundlichkeit IMHO so aussehen:
Code:
 neur = 0
 while neur != 1:
   neu=input("Neue Aufgabe? Y oder N - Rechenart wechseln W ")
    if (neu != "Y") or (neu != "y") or (neu != "N") or (neu != "n") or (neu != "W") or (neu !=  "w"):
      neur = 0
      print("Deine Eingabe war nicht gültig! Gebe bitte Y/y bzw. N/n oder W/w ein.")
    else:
      neur = 1

Gibt es eine schönere Lösung hierfür? Try-Except funktioniert wegen der vielen Möglichkeiten schließlich nicht - vielleicht mache ich aber auch nur einen Denkfehler.

Edit: Habe mittlerweile die Funktion str.lower gefunden. if-Schleife sieht nun so aus:
Code:
if (neu.lower() != "y") or (neu.lower() != "n") or (neu.lower() != "w"):
funktionieren tut es leider immer noch nicht.

Danke für eure Hilfe,
Blck
 
Zuletzt bearbeitet:
Hallo Blck,

funktionieren tut es leider immer noch nicht.
„Funktioniert nicht“ ist keine Problembeschreibung. Du musst schon sagen, welches Verhalten du erwartest und was stattdessen passiert.

Ich vermute mal du hast ein Problem in der Logik deiner if-Bedingung. Überleg dir mal für welchen Wert von neu die Bedingung True ist.

Im Übrigen werden Schleifen in Python mit for oder while umgesetzt, eine „if-Schleife“ gibt es nicht.

Grüße,
Matthias
 

blck

Mitglied
Hallo,
kenn deine Signatur noch mit dem Zusatz:"Und sorge dafür, dass man ihn fischen lässt" ;)
Funktioniert nicht meint: Die while-schleife beendet sich nicht - der parameter wird also nicht umgestellt.
Wie kann eine Schleife, die if-schleife, funktionieren (an anderen stellen) wenn es sie nicht gibt?
Das and anstatt dem or macht IMHO keinen Sinn: schließlich soll es ja sein: wenn neu y oder n oder w ist. Und würde ja bedeuten, dass neu alles drei gleichzeitig sein muss. Oder ist das mein Denkfehler.

Danke, Blck
 
Wie kann eine Schleife, die if-schleife, funktionieren (an anderen stellen) wenn es sie nicht gibt?
Du hast keine „if-Schleife“ in deinem Programm, auch nicht an anderen Stellen. Die Bezeichnung ist einfach falsch. Eine Schleife zeichnet sich dadurch aus, dass ein Programmteil durch sie (kein, ein- oder) mehrmals ausgeführt wird. Eine if-Anweisung ist dagegen eine Verzweigung. Du würdest eine Abzweigung in einer Straße (if-Anweisung) ja auch nicht als Kreisverkehr (Schleife) bezeichnen, oder? ;)

Das and anstatt dem or macht IMHO keinen Sinn: schließlich soll es ja sein: wenn neu y oder n oder w ist. Und würde ja bedeuten, dass neu alles drei gleichzeitig sein muss. Oder ist das mein Denkfehler.
Genau da liegt dein Denkfehler. Wenn man der Einfachkeit halber die Sache mit der Großschreibung für einen Moment außer acht lässt, dann lautet deine Anweisung:
Python:
if (neu != "y") or (neu != "n") or (neu != "w"):
Zu Deutsch: die Bedingung ist erfüllt, falls mindestens einer der folgenden Fälle eintritt:
  • neu ist nicht "y"
  • neu ist nicht "n"
  • neu ist nicht "w"

Egal welchen Wert neu jetzt hat: mindestens eine dieser Bedingungen ist immer erfüllt! Einfach mal für ein paar Werte durchdenken… und dann dasselbe nochmal mit and statt or. Dann müssen nämlich alle diese Fälle erfüllt sein. Und das ist genau das was du willst.

Alternativ könntest du deine ors lassen und stattdessen die != durch == ersetzen und gleichzeitig den if- und den else-Fall vertauschen. Das entspräche dann deiner Prosa-Formulierung „wenn neu y oder n oder w ist“.

Am schönsten fände ich aber dennoch folgende Variante, die ganz ohne logische Operatoren auskommt:
Python:
if neu.lower() not in ("y", "n", "w"):

Grüße,
Matthias