Seite 1 von 1
Wahr und Falsch
Verfasst: Sonntag 5. November 2006, 19:29
von rolgal_reloaded
Hallo zusammen,
Folgendes stimmt? Leere Sequenzen besitzen den Wahrheitswert False
Wenn ja, warum dann das? :
Code: Alles auswählen
>>> l=[]
>>> l==True
False
>>> l=[1,2,3]
>>> l==True
False
Müsste eine Sequenz wenn sie einen Wert hat auch den Wahrheitswert True haben
Vielen Dank im Voraus
rolgal_reloaded
Verfasst: Sonntag 5. November 2006, 19:42
von Whitie
Hallo
Code: Alles auswählen
>>> l = []
>>> bool(l)
False
>>> l = [1, 2, 3]
>>> bool(l)
True
Gruß, Whitie
Verfasst: Sonntag 5. November 2006, 19:44
von rolgal_reloaded
Hallo,
aha, aber warum geht es nicht auch wie oben?
rolgal_reloaded
Verfasst: Sonntag 5. November 2006, 19:57
von BlackJack
Du hast aus
etwas gefolgert was nicht stimmt. Das bedeutet nicht das im Umkehrschluss die leere Liste gleich `False` ist:
Wenn das gelten würde dann müsste auch ``{} == False`` gelten und transitiv damit auch ``[] == {}``. Und spätestens da würde es sehr komisch werden.
Verfasst: Sonntag 5. November 2006, 20:01
von rolgal_reloaded
Hi BlackJack,
ich steig jetzt nicht mit, sorry
Es heisst in mehreren Büchern, dass leere Sequenzen den Wahrheitswert False haben
Dass [] == {} komisch wäre ist klar, deshalb ist mir aber das Andere nicht klar.
ro-re
Verfasst: Sonntag 5. November 2006, 21:10
von Whitie
Die Bücher haben schon recht, eine leere Liste hat den Wahrheitswert False. Sie hat deshalb aber nicht den Typ Boolean.
Code: Alles auswählen
>>> l = []
>>> type(l)
<type 'list'>
>>> b = False
>>> type(b)
<type 'bool'>
>>> l == b
False
Gruß, Whitie
Verfasst: Sonntag 5. November 2006, 23:12
von rolgal_reloaded
Hallo,
das ist mir auch klar, aber trotzdem müsste eine leere liste False ergeben, genauso wie bei den Zahlen 1 und 0
LG
rolgal_reloaded
Verfasst: Sonntag 5. November 2006, 23:29
von Matflasch
Evtl hilft dir das weiter:
Code: Alles auswählen
>>> lst=[]
>>> if lst:
... print "Hallo"
...
>>> lst=[1,2,3]
>>> if lst:
... print "Hallo"
...
Hallo
>>>
In sofern kann man den Wahrheitswert der Listen verwenden.
Verfasst: Sonntag 5. November 2006, 23:44
von rolgal_reloaded
Hallo Matflasch,
ist mir auch klar, warum das so läuft.
Eben weil das erste mal die Liste den Wert False und das zweite Mal den Wert True hat.
Oder nicht?
Wenn ja müsste bei
beides mal was anderes rauskommen.
LG
rolgal_reloaded
Verfasst: Sonntag 5. November 2006, 23:54
von Matflasch
Genau, bei einer leeren Liste würde im prinzip auf if False: abgefragt werden... Sofern in der Liste was ist, evaluiert die Abfrage dann zu if True:
Aber wie Whitie schon geschrieben hat, eine leere Liste hat deshalb nicht den Typ boolean, sonst wäre es ja keine Liste mehr
Code: Alles auswählen
>>> lst=[1,2,3]
>>> bool(lst) == True
True
>>> lst=[]
>>> bool(lst) == True
False
>>>
Verfasst: Sonntag 5. November 2006, 23:58
von rolgal_reloaded
...jo bei mir hat es glaube ich inzwischen auch geklingelt.
Es geht natürlich um das was drin oder nicht drin ist und nicht um den Typ selbt, oder?
Code: Alles auswählen
>>> l=[]
>>> True in l
False
>>> l=[1,2,3]
>>> True in l
True
>>>
Ist doch etwas anders dargestellt dasselbe wie du meinst?
LG
rolgal_reloaded
Verfasst: Montag 6. November 2006, 00:08
von Matflasch
Nicht ganz, was würdest du sonst dazu sagen:
Code: Alles auswählen
>>> lst=[False]
>>> lst
[False]
>>> bool(lst) == True
True
>>>
Die Liste an sich ist ein Container. Sobald in der Liste etwas vorhanden ist, evaluiert der Wahrheitswert zu True, selbst wenn nur ein False in der Liste ist.
Der Wahrheitswert False einer leeren Liste ist schon an die Liste selbst gebunden.
Zu deinem Code hab ich dieses Beispiel noch:
Genau genommen evaluiert die 1 in der Liste zu True, wenn du "True in lst" schreibst.
Code: Alles auswählen
>>> -1 == True
False
>>> 0 == True
False
>>> 1 == True
True
>>> 2 == True
False
>>> 3 == True
False
>>>
Verfasst: Montag 6. November 2006, 00:32
von rolgal_reloaded
Ich bin immer etwas ungenau, sorry:
True=1, der Wahrheitswert von 1 ist auch True, sowie der von 2, aber natürlich ist 2!=True
Deshalb muss bei deiner Liste natrülich ein False rauskommen bei bool(lst)
Ich glaube wir habens, bzw. ich
LG
rolgal_reloaded
Verfasst: Montag 6. November 2006, 00:40
von BlackJack
Hach, ja um die Verwirrung komplett zu machen:
Code: Alles auswählen
In [103]: True in [1, 2, 3]
Out[103]: True
In [104]: True in [4, 5, 6]
Out[104]: False
Das liegt daran das True nicht nur den Wert 1 hat, sondern auch eine ganze Zahl ist weil `bool` eine Unterklasse von `int` ist:
Code: Alles auswählen
In [105]: True == 0
Out[105]: False
In [106]: True == 1
Out[106]: True
In [107]: True + 1
Out[107]: 2
In [108]: isinstance(True, int)
Out[108]: True
In [109]: issubclass(bool, int)
Out[109]: True
Der Wahrheitswert eines Objekts ist aber schlicht und ergreifend das, was bei ``bool(obj)`` herauskommt. Das ist alles. Mehr gibt's da nicht zu verstehen.
Verfasst: Montag 6. November 2006, 00:48
von Y0Gi
Du hast die Wahrheitswerte von Objekten mit *den* beiden Wahrheitswerten, True und False, verwechselt. Die Objekte selbst sind immer noch... eben sie selbst
