Boolsche Unklarheiten

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
Python93
User
Beiträge: 36
Registriert: Mittwoch 13. Juni 2012, 07:50

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
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.
deets

@python93

Du hast da was falsch:

Code: Alles auswählen

>>> False == False
True
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Python geht so vor:

True == False == False
<=> True == False and False == False
<=> False and True
<=> False
Python93
User
Beiträge: 36
Registriert: Mittwoch 13. Juni 2012, 07:50

@ 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.
Ich benutze:
- Python 2.7
- Windows XP
Python93
User
Beiträge: 36
Registriert: Mittwoch 13. Juni 2012, 07:50

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
Ich benutze:
- Python 2.7
- Windows XP
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

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.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@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.
Python93
User
Beiträge: 36
Registriert: Mittwoch 13. Juni 2012, 07:50

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"
Ich benutze:
- Python 2.7
- Windows XP
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Naja, mir reicht das.

Python erlaubt implizite transitive Vergleiche und das finde ich, ist schon eine feine Sache.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Antworten