Pyrhon: Auswertung logischer Ausdruck

OP #4615371
Lesenswert?
• ▲
▼
Carl D. schrieb:
> Versuch mal in Textform darzulegen, was das tun soll.

Variante 1 (Auswertung von links):
1. Ist 10 ungleich 10?    --> False
2. Ist False größer 4?    --> False (?)

Variante 2 (Auswertung von rechts):
1. Ist 10 größer 4?       --> True
2. ist 10 ungleich True?  --> False (?)

Edit 1: Gibt es eine inheränte Regel (wie in C), dass alles ungleich 0 
True ist?

Edit 2: Mhh... True > 4 gibt auch False

Gruß
Dennis
OP #4615511
Lesenswert?
• ▲
▼
Ich habe die Frage nicht gestellt weil diese sich erst im Laufe der 
Diskussion als URSACHE für das beobachtete Verhalten herausgestellt hat. 
Ich kannte aber nur die WIRKUNG für die ich eine Erklärung gesucht habe. 
Henne und Ei.. ;-)

Nochmals, wo lieg mein Denkfehler?
1
var1 = 15
2
var2 = 3
3
result = (var1 + var2) != 10 > 4
4
print( result )

Ausgabe (Python 2.7) ist True. Meine Erwartung ist aber
1) 18 ist ungleich 10 --> True
2) True wird nach 1 konvertiert
3) 1 größer als 4 ist False
4) Ausgabe ist False

Gruß
Dennis
Gast #4615572
Lesenswert?
• ▲
▼
Dennis S. schrieb:
> Ausgabe (Python 2.7) ist True. Meine Erwartung ist aber
> 1) 18 ist ungleich 10 --> True
> 2) True wird nach 1 konvertiert
> 3) 1 größer als 4 ist False
> 4) Ausgabe ist False

Ja, da muss man tiefer schauen :-)

https://docs.python.org/2/reference/expressions.html#comparisons

Der Interprter zerlegt die Zuweisung in 2 Ausdrücke (mit entsprechendem 
"Wahrheitsgehalt"-Ergebnis) und vergleicht/verknüpft die Ergebnisse mit 
AND:

18 != 10 AND 10 > 4

Da beides wahr ist kommt auch TRUE heraus.
Gast #4615577
Lesenswert?
• ▲
▼
Moin,

ist eher so, das 4 nach boolean umgebandelt wird.
Drehe den Ausdruck mal um

4 < (17 != 10)

und es kommt false raus.

PS: Deswegen kann ich diese untypisierte Sch**ße nicht leiden. In C# 
hätte der Compiler gemeckert.
Gast #4615640
Lesenswert?
• ▲
▼
Ich kenne mich ja mit Python nicht so aus, aber ein Compiler, der was 
auf sich hält, sollte auch ordentlich meckern. Und zwar in der Form, als 
ob Du Äpfel mit Birnen vergleichst.
Du mach doch folgendes:
(7+3)   ... Zahl
10 > 4  ... Logisch
(Zahl) != (Logisch)      ist Mist
Gast #4615643
Lesenswert?
• ▲
▼
Dennis S. schrieb:
> aber hier fande ich es wenig intuitiv.

Nein - da bin ich anderer Meinung. Nur so ist es korrekt - es wäre 
falsch, einen Wahrheitswert (in diesem Fall repräsentiert durch 0 oder 1 
- weil es eben eine Maschine/ein Computer ist) mit einer Zahl zu 
vergleichen.

Wie sieht denn das Ergebnis Deiner Beispiel-Zuweisung in C aus?
OP #4615655
Lesenswert?
• ▲
▼
Amateur schrieb:
> Ich kenne mich ja mit Python nicht so aus [...]
Jepp.. hat aber auch nicht richtig mit Python zu tun! Es sind 
unterschiedliche Konzepte, beide mit Vor- und Nachteilen. 
Einstiegsliteratur:
https://de.wikipedia.org/wiki/Dynamische_Typisierung

Dieter F. schrieb:
> Nein - da bin ich anderer Meinung. Nur so ist es korrekt - es wäre
> falsch, einen Wahrheitswert (in diesem Fall repräsentiert durch 0 oder 1
> - weil es eben eine Maschine/ein Computer ist) mit einer Zahl zu
> vergleichen.
>
> Wie sieht denn das Ergebnis Deiner Beispiel-Zuweisung in C aus?
Abgesehen von der dynamischen Typisierung, war das "Erweitern" des 
Ausdrucks zu mehreren Ausdrücken für mich einfach nicht ersichtlich.
Um das in C zu schreiben, müsste ich vorher wissen was ich erreichen 
will! Das war hier nicht der Fall. Ich habe lediglich ein bisschen 
rumgespielt und geguckt was passiert.

Gruß
Dennis
(Firma: privatfrickler.de) #4615924
Lesenswert?
• ▲
▼
Hallo,

interessantes Beispiel. Ich muss zugeben, ich wäre wohl selbst unter 
starkem Alkoholeinfluss nie auf die Idee gekommen, so einen Ausdruck zu 
schreiben!

Ich habe das mal in Swift ausprobiert, dort gibt es zwei 
Fehlermeldungen.

Zum einen, dass „er” int nicht nach bool konvertieren kann und zum 
anderen, dass Reihungen nicht-assoziativer Operatoren nicht erlaubt 
sind.

vlg
 Timm
Angehängte Dateien:
Gast #4615945
Lesenswert?
• ▲
▼
Dennis S. schrieb:
> Ich habe lediglich ein bisschen
> rumgespielt und geguckt was passiert.

Wenn ich in C lediglich ein bisschen Rumspiele und Wert an der Stelle 12 
aus einem Array der länge 10 haben möchte passieren auch die 
wunderbarsten Dinge. Python hätte gemeckert, irgendwas mit out of range. 
Da hat halt jede Sprache ihre Tücken.

Aber es gibt bestimmt schon 10 Threads Pytonh vs. C. Da kann mann alle 
Vor- und Nachteile nachlesen.
(Firma: privatfrickler.de) #4616054
Lesenswert?
• ▲
▼
Dennis S. schrieb:
> @Timm Reinisch:
> Mir ist der Bezug zum Thema nicht ganz klar... Python und Swift sind
> doch unterschiedliche Sprachen!

da hast Du recht. Ich wollte nur den Punkt, der aufkam, untermauern, 
dass man berechtigterweise die Auffassung vertreten kann, dass sich die 
Frage nach der Auswertung nicht stellen sollte, weil der Ausdruck 
schlicht Nonsens ist. Geht wohl etwas in Richtung ot, sorry.

Die IDE ist XCode.

vlg
 Timm

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren