if anweisung führt keinen else block aus --> Anfänger

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Hartmannsgruber
User
Beiträge: 89
Registriert: Mittwoch 15. Januar 2014, 22:30
Wohnort: Bad Kötzting
Kontaktdaten:

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 :(
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Ich setze mal Klammern für dich:

Code: Alles auswählen

if (abfrage == 1) or 2 or 3:
Also falls abfrage != 1 ist wird geprüft ob 2 "wahr" ist, was es immer ist.

Code: Alles auswählen

>>> bool(2)
True
Da steht also effektiv so etwas wie:

Code: Alles auswählen

if True:
BSA
User
Beiträge: 38
Registriert: Freitag 6. Dezember 2013, 07:49

Oder das ganze ausgeschrieben:

Code: Alles auswählen

if abfrage == 1 or abfrage == 2 or abfrage == 3:
    ...
else:
    ...
Oftmals beschleicht mich hier im Forum das heimliche Gefühl, an verschiedenen Stellen mal ein einfaches "Bahnhof" zu posten.

Wann du den Fisch auch fängst, er ist frisch. Sprichwort
Hartmannsgruber
User
Beiträge: 89
Registriert: Mittwoch 15. Januar 2014, 22:30
Wohnort: Bad Kötzting
Kontaktdaten:

Ich habe die Codezeile jetzt auf so geändert, das Problem bleibt aber das gleiche :(

Code: Alles auswählen

if abfrage == (1 or 2 or 3):
1 wird richtig ausgegeben, ab 2 wird immer falsch ausgegeben.
Bitte Erklären warum.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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

Code: Alles auswählen

x == 42 or 23 or 2
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:

Code: Alles auswählen

if abfrage in (1, 2, 3)
.
Damit prüfst du, ob abfrage ein Element aus (1, 2, 3) ist.
Das Leben ist wie ein Tennisball.
Hartmannsgruber
User
Beiträge: 89
Registriert: Mittwoch 15. Januar 2014, 22:30
Wohnort: Bad Kötzting
Kontaktdaten:

Vielen Vielen lieben Dank, für deine super Erklärung, EyDu.
Jetzt kapier auch ich es, habe das "or" zu Umgangsprachlich genommen :-)
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

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:

Code: Alles auswählen

>>> 0 or 42 or -7
42
Antworten