true/false

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
lagrundge
User
Beiträge: 3
Registriert: Freitag 3. Oktober 2008, 23:17

Freitag 3. Oktober 2008, 23:28

Hallo auch ,Ich bin neu hier im Forum und hab grad erst mit python programmieren angefangen, allerdings hab ich zur Zeit mal wieder ein mir unverständliches Problem.
Es kommt häufiger beim programmieren in der interaktiven Shell vor, dass sich die Integerwerte für true/false ändern, das ganze hebt sich wieder auf sobald ich den Interpreter neu starte. Hier mal eine Auszug aus dem Terminal

>>> True == 0
True
>>> True == 1
False
>>>
user@ubuntu:~/Desktop/test$ python
Python 2.5.2 (r252:60911, Jul 31 2008, 17:28:52)
[GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> True ==1
True
>>> True ==0
False
>>>

ich hoffe mir kann jemand bei dem Problem helfen, danke schonmal im vorraus
DasIch
User
Beiträge: 2465
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Freitag 3. Oktober 2008, 23:56

Das kann ich absolut nicht nachvollziehen, allerdings sind True und False beides nur Refrenzen auf Instanzen der Klasse bool, welches eine Subklasse von int ist. Wenn du also True und False zurück haben willst sollte ein einfaches

Code: Alles auswählen

True = bool(1)
#bzw.
False = bool(0)
reichen. Man muss nicht 1 oder 0 nehmen der Wahrheitswert des Objektes welches man nimmt sollte nur passen.
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

Samstag 4. Oktober 2008, 06:18

Kannst du das so reproduzieren? Ansonsten würde ich mal darauf tippen, daß du vor dem Neustart des Interpreters irgendwas gemacht hast, was die Bedeutung von 'True' umdefiniert hat. Zum Beispiel statt '==' mal aus Versehen nur '=' getippt. Hier an meinem Rechner konnte ich diesen Effekt nicht beobachten, und es wäre auch fatal, wenn es so wäre.
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Samstag 4. Oktober 2008, 08:19

Verständnisfrage: Wozu brauchst du das?
Für Vergleiche mit den Boolschen Konstanten benutzt man die Identität, dh `is' - JA für den Fall geht es nicht, aber verstehe den Sinn des Falls auch nicht ;)

Zu dem Problem: Du musst das - wie DasIch schon sagte - irgendwo überschrieben haben.
BlackJack

Samstag 4. Oktober 2008, 08:25

Für Vergleiche benutzt man *nicht* ``is`` weil es eben nicht *die* Konstanten gibt. Es ist nicht garantiert woran `True` und `False` gebunden sind. Insbesondere in älterem Code werden die Namen manchmal "neu" definiert, weil es die früher gar nicht gegeben hat.

Ausserdem sollte man sowie so nicht irgend etwas auf ``obj == True`` oder gar ``obj is True`` prüfen, sondern gleich den Wahrheitswert von `obj` verwenden.
lagrundge
User
Beiträge: 3
Registriert: Freitag 3. Oktober 2008, 23:17

Samstag 4. Oktober 2008, 10:44

@cofi: an sich brauch ich das in meinem programm nicht oder so, ich arbeite nur gerade das tutorial how to think like a scentist with python durch und da ist es mir halt aufgefallen, als ich mir die rückgabewerte von funktionen angeschaut habe ...
@pekh: ok es könnte natürlich sein das ich ausversehen die Referenzierung der Werte geändert habe, wobei ich das niemals expliziz getan habe, weitherhin ist das Problem ja auch schon mehrmals aufgetreten...
Ich denk mal ich werd einfach die Referenzierung ändern wenn ich das Problem nochmal hab, bzw vllt find ich ja auch die Ursache.
Antworten