true oder 1

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
StevenB99
User
Beiträge: 33
Registriert: Donnerstag 4. Juni 2020, 23:12

Hallo zusammen. Ich soll eine Warheitstabelle für den Ausdruck : "not a or b or c " erstellen. Ich kriege jetzt true , 0 und 1 als output raus. Ist true nicht auch 1? Wieso kommt da mal true und mal 1 raus? Hat das irgendein Sinn? Z.b bei
not0 or 0 or 0 kriege ich true raus und bei "not 1 or 0 or 1 kriege ich "1" als output.
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das liegt an der Implementierung von and und or. Die funktionieren ein bisschen anders, als man das denkt.

Code: Alles auswählen

 a or b 


koenntest du hinschreiben als

Code: Alles auswählen

def logical_or(a, b):
     if a: # implizite Bestimmung von bool(a)
        return a
     return b
Das heisst, dass statt einem Wahrheitswert einfach nur der Wert, der jeweils die Bedingung erfuellt hat, zurueck gegeben wird. Und daher kommt das bei dir. Kann man zB so einfachsehen:

Code: Alles auswählen

>>> "abc" or "d"
'abc'
Benutzeravatar
peterpy
User
Beiträge: 188
Registriert: Donnerstag 7. März 2013, 11:35

Hallo StevenB99,
Hier ein Auszug aus der achon recht alten Pytonreferenz:
Mit den Schlüsselwörtern and, or und not können boolesche Ausdrücke gebildet werden. Diese
Operatoren verhalten sich wie folgt:

x or y Ergibt x, falls x wahr ist, sonst y
x and y Ergibt x, falls x falsch ist, sonst y
not x Ergibt 1, falls x falsch ist, sonst 0

Bei Verwendung eines Ausdrucks zur Bestimmung eines Wahrheitswertes werden alle von Null
verschiedenen Zahlen und alle nicht-leeren Strings, Listen, Tupel oder Dictionaries als logisch wahr
betrachtet. Die Zahl Null, None sowie leere Listen, Tupel und Dictionaries werden logisch falsch
ausgewertet.
Die Auswertung eines booleschen Ausdrucks erfolgt von links nach rechts und verwendet den rechten
Operanden nur dann, wenn er zur Bestimmung des Ergebnisses notwendig ist. In a and b wird b
nur dann ausgewertet, falls a logisch wahr ist.

Code: Alles auswählen

>>> a = True
>>> b = 5
>>> a and b
5

>>> a or b
True

b = True
>>> a and b
True
>>> 
>>> a = 7
>>> a or b
7
Also verwende für boolsche Operationen True und False.
Gruss Peter
Antworten