Guten Morgen, wie wird der folgende (und ähnliche) Audruck von Python ausgewertet?
1 | (7+3) != 10 > 4 |
Ergebnis ist False. Gruß Dennis
|
Forum: PC-Programmierung Pyrhon: Auswertung logischer AusdruckGuten Morgen, wie wird der folgende (und ähnliche) Audruck von Python ausgewertet?
Ergebnis ist False. Gruß Dennis Versuch mal in Textform darzulegen, was das tun soll. So wie es da steht: False > 4 scheint False akzeptabel :
Bearbeitet durch User
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 :
Bearbeitet durch User
True wir als 1, False als 0 interpretiert. True == 1 -> True False == 0 -> True Dennis S. schrieb: > (7+3) != 10 > 4 -> 0 > 4 -> False Karl schrieb: > True wir als 1, False als 0 interpretiert. > > True == 1 -> True > False == 0 -> True > > Dennis S. schrieb: >> (7+3) != 10 > 4 > > -> 0 > 4 -> False Okay.. also konvertiert Python munter zwischen Boolean und Integer hin und her.. Vielen Dank. Dennis S. schrieb: > Okay.. also konvertiert Python munter zwischen Boolean und Integer hin > und her.. > Vielen Dank. So wie es halt dokumentiert ist. C macht ja auch nichts anderes. https://www.hdm-stuttgart.de/~maucher/Python/html/Datentypen.html != und > haben die Gleiche Priorität (vgl. Punkt vor Strich). Dann wird von links nach rechts ausgewertet Vielen Dank für die Antworten. Kern der Frage war dann eigentlich, ob es möglich ist numerische und logische Werte miteinander zu vergleichen. --> geht, aufgrund der implizizen Umwandlung von False nach 0 und True nach 1. Gruß Dennis Dennis S. schrieb: > Kern der Frage war dann eigentlich, ob es möglich ist numerische und > logische Werte miteinander zu vergleichen. Warum hast du dann die Frage nicht gestellt? > --> geht, aufgrund der implizizen Umwandlung von False nach 0 und True > nach 1. Es wird auch 0 nach False und der Rest nach True gewandelt. Dennis S. schrieb: > Kern der Frage war dann eigentlich, ob es möglich ist numerische und > logische Werte miteinander zu vergleichen. Dennis S. schrieb: > wie wird der folgende (und ähnliche) Audruck von Python ausgewertet? Das war der ursprünglichen Fragestellung nur schwer zu entnehmen :-) 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?
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 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. 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. nicht"Gast" schrieb: > Drehe den Ausdruck mal um > > 4 < (17 != 10)> > und es kommt false raus. Aber nur wegen der Klammer! Dieter F. schrieb: > 18 != 10 AND 10 > 4 Pffff... Okay, ich sehe ein, dass es für Bereichsabfragen (10<x<70) ganz nett ist.. aber hier fande ich es wenig intuitiv. Gut, dass ich hauptsächlich C schreibe. Das ist einfach. :-D Gruß Dennis :
Bearbeitet durch User
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 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? 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 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 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. @Timm Reinisch: Mir ist der Bezug zum Thema nicht ganz klar... Python und Swift sind doch unterschiedliche Sprachen! Nettes Feature der IDE (Values am Rand). Welche ist das? Gruß Dennis Karl schrieb: > Aber es gibt bestimmt schon 10 Threads Pytonh vs. C. Da kann mann alle > Vor- und Nachteile nachlesen. Und das hier sollte nicht der 11. werden! Deswegen: die Frage ist geklärt. Alles was jetzt kommt ist Offtopic... 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 Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.
|
|