Seite 1 von 1

Boolsche Unklarheiten

Verfasst: Mittwoch 13. Juni 2012, 07:57
von Python93
Hallo liebe Programmierfreunde,

ich bin seit letztem Jahr September Azubi und programmiere mit Python.
Nun bin ich aus Zufall auf folgendes Problem gestoßen:

1.) True == False -> False
2.) True == True -> True
3.) False == False -> False

soweit so gut ;) aber nun folgendes:

4.) True == False == False -> False laut Python
5.) (True == False) == False -> True

Nun stellt sich mir die Frage... wieso Python da nicht True herausbekommt.
Ich habe bereits in der Python Doku nachgeschaut und nachgelesen ob es etwas mit der Leserichtung der Ausdrücken in Python zu tun haben könnte. Gelesen wird von Links nach Rechts.

Weiß jemand, wieso bei dem Beispiel Nr. 4 False rauskommt?
Vielen Dank fürs Helfen :)

Grüßle Python93

Re: Boolsche Unklarheiten

Verfasst: Mittwoch 13. Juni 2012, 08:13
von BlackJack
Vergleichsoperatorverkettung funktioniert in Python so: ``a op b op c`` ist äquivalent zu ``a op b and b op c``. Damit beispielsweise ``0 <= n <= 12`` das bedeutet wonach es aussieht.

Re: Boolsche Unklarheiten

Verfasst: Mittwoch 13. Juni 2012, 08:17
von deets
@python93

Du hast da was falsch:

Code: Alles auswählen

>>> False == False
True

Re: Boolsche Unklarheiten

Verfasst: Mittwoch 13. Juni 2012, 09:20
von snafu
Python geht so vor:

True == False == False
<=> True == False and False == False
<=> False and True
<=> False

Re: Boolsche Unklarheiten

Verfasst: Mittwoch 13. Juni 2012, 09:22
von Python93
@ deets

danke, ja stimmt. War wahrscheinlich etwas konfus von den ganzen True's und False's :)

@ BlackJack

ahh Ok, habs verstanden! Vielen Dank!! :) und auch an snafu für die Veranschaulichung!
Schönen Tag noch.

Re: Boolsche Unklarheiten

Verfasst: Mittwoch 13. Juni 2012, 12:08
von Python93
Okay, ja ich habe jetzt paar Möglichkeiten ausprobiert. Die Vorgehensweise wie er es macht ist jetzt klar.
Aber warum macht Python das so? Warum erkennt Python das als müsse er den 'Term' trennen und and einfügen?

Wenn mir das noch jemand erklären kann, bin ich wunschlos glücklich! :D

Re: Boolsche Unklarheiten

Verfasst: Mittwoch 13. Juni 2012, 12:11
von jbs
BlackJack hat geschrieben:Vergleichsoperatorverkettung funktioniert in Python so: ``a op b op c`` ist äquivalent zu ``a op b and b op c``. Damit beispielsweise ``0 <= n <= 12`` das bedeutet wonach es aussieht.

Re: Boolsche Unklarheiten

Verfasst: Mittwoch 13. Juni 2012, 13:33
von snafu
@Python93: Das beispielhaft genannte `0 <= n <= 12` soll halt zu `0 <= n and n <= 12` werden. Für andere Dinge braucht man solche "Dreier-Vergleiche" in der Praxis eigentlich auch nicht. Daher ist das so gesehen ein gewünschtes Verhalten. Nochmal der Vergleich:

Code: Alles auswählen

if 0 <= n <= 12:
    [...]
vs.

Code: Alles auswählen

if n >= 0 and n <= 12:
    [...]
Bedeutet alles: "Wenn n zwischen 0 und 12 liegt, dann...", nur das erste ist lesbarer.

Re: Boolsche Unklarheiten

Verfasst: Mittwoch 13. Juni 2012, 14:21
von Python93
Also ist das der einzige Grund..? Okay, danke dir nochmal.
Ich hab mich halt nur gewundert, dass die vereinfachte Darstellung der einzige Grund ist.

Ihr werdet sicher noch ein wenig von mir hören xD bin ja noch am Anfang meiner Ausbildung.
Liebe Grüße, Python93

Code: Alles auswählen

print "Chiaoo"

Re: Boolsche Unklarheiten

Verfasst: Mittwoch 13. Juni 2012, 14:59
von jbs
Naja, mir reicht das.

Python erlaubt implizite transitive Vergleiche und das finde ich, ist schon eine feine Sache.