if und Strings mit dreifachen Einführungszeichen

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
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Ich bin vorhin auf etwas für mich sehr seltsames gestoßen. Um es mal kurz zu machen

Code: Alles auswählen

dasich@tux ~ $ python
Python 2.4.4 (#1, May  9 2008, 21:15:54) 
[GCC 4.1.2 (Gentoo 4.1.2 p1.0.2)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> test = 'word'
>>> if test == '''doesn't''':
...     print test
... 
>>> if test == '''doesn't''' or '''don't''':
...     print test
... 
word
>>> if test is '''doesn't''' or '''don't''':
...     print test
... 
word
>>> 
Wieso passiert das? Ist das jetzt ein Denkfehler meinerseits? Ich bin momentan etwas verwirrt, nicht dass ich es nicht anders lösen könnte aber ich würde schon gerne wissen wieso das passiert.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Das ist ein typischer Anfängerfehler bei der Verknüpfung von Bedingungen - mit den dreifachen Anführungszeichen hat das nichts zu tun.

Beispiel:

Code: Alles auswählen

>>> a = 1
>>> if a==2 or a==3:
...     print a
...
>>> if a==2 or 3:
...     print a
...
1
Was du meinst, ist der erste Fall. Umgangssprachlich liegt der zweite Fall aber näher und so hast du auch kodiert. In vielen Programmiersprachen führt das zu einer Fehlermeldung - in Python nicht. Das liegt daran, dass z.B. nicht-leere Zeichenketten (dein Fall) oder Zahlenwerte ungleich Null als True angesehen werden.

Das zweite Beispiel könnte man auch so schreiben:

Code: Alles auswählen

if a==2 or True:
Und das ist natürlich immer True. Das ist genau das, was du machst.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Ah ok. Ist auch irgendwie sinnvoller, hätte ich eigentlich drauf kommen sollen :oops: Danke für die Aufklärung.
BlackJack

Diesen Test kann man übrigens auch so schreiben: ``if test in ("doesn't", "don't"):``
Antworten