Seite 1 von 1
if anweisung führt keinen else block aus --> Anfänger
Verfasst: Mittwoch 15. Januar 2014, 22:35
von Hartmannsgruber
Hallo,
ich bin neu hier im Forum und auch Pythonneuling.
Ich habe ein Problem, die Lösung ist wahrscheinlich zwar sehr simpel, aber ich verzweifle dran
Code: Alles auswählen
#Abfrage
print ("Was möchten Sie tun?\n\n1, 2 oder 3?\n")
abfrage = input("1 oder 2 oder 3 eingeben: \n")
if abfrage == 1 or 2 or 3:
print("richtig")
else:
print ("falsch")
Ich gebe nun bei der Abfrage 1 ein -> ausgabe richitig erscheint
Wenn ich aber nun 5 eingebe -> ausgabe richtig erscheint, sollte aber falsch erscheinen
Was stimmt denn nur nicht ?
BITTE HILFE

Re: if anweisung führt keinen else block aus --> Anfänger
Verfasst: Mittwoch 15. Januar 2014, 22:55
von Darii
Ich setze mal Klammern für dich:
Also falls abfrage != 1 ist wird geprüft ob 2 "wahr" ist, was es immer ist.
Da steht also effektiv so etwas wie:
Re: if anweisung führt keinen else block aus --> Anfänger
Verfasst: Mittwoch 15. Januar 2014, 23:34
von BSA
Oder das ganze ausgeschrieben:
Code: Alles auswählen
if abfrage == 1 or abfrage == 2 or abfrage == 3:
...
else:
...
Re: if anweisung führt keinen else block aus --> Anfänger
Verfasst: Mittwoch 15. Januar 2014, 23:51
von Hartmannsgruber
Ich habe die Codezeile jetzt auf so geändert, das Problem bleibt aber das gleiche
1 wird richtig ausgegeben, ab 2 wird immer falsch ausgegeben.
Bitte Erklären warum.
Re: if anweisung führt keinen else block aus --> Anfänger
Verfasst: Donnerstag 16. Januar 2014, 00:03
von EyDu
Vielleicht, noch eine kurze Ausführung, damit du das Problem auch verstehen kannst: Die Opereratoren "or" und "and" darfst du nicht umgangssprachlich verstehen. Es handelt sich dabei um das logische Oder und das logische Und. Wenn du schreibst
bedeutet das nicht "wenn x den Wert 42 hat oder den Wert 23 oder den Wert 2". In Programmiersprachen verknüpft das Oder zwei Aussagen: das was links vom or steht und das was rechts vom or steht. ``x or y`` bedeutet also: Wenn x wahr ist oder wenn y wahr ist. Wenn du also ``x == 42 or 23 or 2`` schreibst wird das interpretiert als: Wenn x==42 ist oder wenn 23 wahr ist oder wenn 2 wahr ist.
Nun zu deinem letzten Post: Nein, an den Klammern hat es nicht gelegen, dein Ausdruck ist immer noch nicht korrekt. ``1 or 2 or 3`` bedeutet: falls 1 wahr ist oder 2 wahr ist oder 3 wahr ist. Da alle Zahlen ungleich 0 zu wahr ausgewertet werden, kannst du das ``(1 or 2 or 3)``(im Prinzip) durch den Wert True ersetzen. Damit bleibt dann ``abfrage == True`` übrig. Dein Ergebnis stimmt nur dann zufällig wenn abfrage den Wert 1 hat, da True äquivalent zu 1 ist. Deine Zeile hättest du aber auch ganz selbst einfach mal selber testen können
Richtig lautet die Abfrage:
.
Damit prüfst du, ob abfrage ein Element aus (1, 2, 3) ist.
Re: if anweisung führt keinen else block aus --> Anfänger
Verfasst: Donnerstag 16. Januar 2014, 00:07
von Hartmannsgruber
Vielen Vielen lieben Dank, für deine super Erklärung, EyDu.
Jetzt kapier auch ich es, habe das "or" zu Umgangsprachlich genommen

Re: if anweisung führt keinen else block aus --> Anfänger
Verfasst: Donnerstag 16. Januar 2014, 08:06
von Sirius3
Nu eine Ergänzung zu EyDu: der Ausdruck (1 or 2 or 3) führt nicht zum Ergebnis Wahr, weil 1 wahr ist, sondern zum Ergebnis 1 weil 1 wahr ist: