Seite 1 von 1

if und Strings mit dreifachen Einführungszeichen

Verfasst: Donnerstag 22. Mai 2008, 21:15
von DasIch
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.

Verfasst: Donnerstag 22. Mai 2008, 21:24
von numerix
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.

Verfasst: Donnerstag 22. Mai 2008, 21:27
von DasIch
Ah ok. Ist auch irgendwie sinnvoller, hätte ich eigentlich drauf kommen sollen :oops: Danke für die Aufklärung.

Verfasst: Donnerstag 22. Mai 2008, 21:47
von BlackJack
Diesen Test kann man übrigens auch so schreiben: ``if test in ("doesn't", "don't"):``