Parsen führender Nullen

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
Wolfgang.Belau
User
Beiträge: 5
Registriert: Mittwoch 10. März 2010, 18:01
Wohnort: Bremen

Code: Alles auswählen

a_number = 07, 007
wird mit Version 2.6.4 ohne Probleme geparst und als type int erkannt. Dies gilt auch für Zahlesymbole 0 bis 7.

Code: Alles auswählen

a_number = 08, 008
wird als "invalid token" identifiziert! Die Integerzahl muss hier ohne führende Nullen oder mit int("08") definiert werden. Kleine Überraschungen!
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Code: Alles auswählen

>>> 01
1
>>> 02
2
>>> 03
3
>>> 04
4
>>> 05
5
>>> 06
6
>>> 07
7
>>> 010
8
Keine Überraschung, dass sind oktale Zahlen, also Zahlen mit der Basis 8.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

In Python 3 ist man zu übergegangen, kann leider nicht testen ob die führende `0' immernoch funktioniert, ich glaube aber nicht. Die neue Notation hat natuerlich auch was schreckliches :(

Edit: Die neue Notation gibt es schon seit 2.6
BlackJack

Die Frage ist halt wie oft man Oktalzahlenliterale braucht und wie oft jemand darauf reinfällt, dass 08 ein Syntaxfehler ist. Das passiert ja nicht nur Anfängern. Mir ist das auch schonmal auf die Füsse gefallen.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Also ich bin noch nicht auf die Idee gekommen Zahlen mit führenden Nullen im Code zu nutzen, wüsste auch gar nicht wieso man dass machen sollte.
BlackJack

@DasIch: Mir passiert so etwas regelmässig bei Datumsangaben. Für heute würde ich ``datetime.date(2010, 07, 27)`` ganz automatisch so tippen, weil ich das mit den zweistelligen Zahlen so gewohnt bin. Am Anfang des Monats und ab nächstem Monat wäre das ein Problem. :-)
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

Ab Python 3.x ist die vorangestellte "0" nicht mehr erlaubt:

Code: Alles auswählen

>>> from datetime import date
>>> date(2010,07,28)
  File "<stdin>", line 1
    date(2010,07,28)
               ^
SyntaxError: invalid token
Den Änderung finde ich hier sinnvoll und insbesondere anfängerfreundlich.

Grüße
Gerrit
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

gkuhl hat geschrieben:Den Änderung finde ich hier sinnvoll und insbesondere anfängerfreundlich.
Ehrlich gesagt finde ich dass ziemlich lächerlich. Oktale Zahlen haben eine neue Syntax bekommen und es gibt absolut keinen technischen Grund der diese Änderung rechtfertigt.
lunar

@DasIch: Sie vermeidet Fehler und Mehrdeutigkeiten, und sorgt so dafür, dass man den Quelltext besser lesen kann. Es geht da um die Programmierer! „Technische Gründe“ kannst Du in den Wind schießen, „technisch“ gesehen kann man auch einfach nur hexadezimale Literale erlauben, oder Zahlen zur Basis 26 über die Buchstaben des Alphabets darstellen.
BlackJack

Ausserdem sind die verschiedenen Basen nun einheitlicher, denn neben '0o' gibt es ja auch '0x' und '0b' als Präfixe für hexadezimale und binäre Literale.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Aber 07 als Syntaxfehler find ich jetzt aber auch eher seltsam und da werden sicher Leute kommen und sich wundern warum sie plötzlich Syntaxfehler haben in ihrem Code.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

@Leonidas: Ich nehme mal an, dass ist für die gedacht, die Oktalzahlen haben möchten, damit die zur Laufzeit nicht davon überrascht werden, dass 010 nun plötzlich nicht mehr 8 ist. :-)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

BlackJack hat geschrieben:@Leonidas: Ich nehme mal an, dass ist für die gedacht, die Oktalzahlen haben möchten, damit die zur Laufzeit nicht davon überrascht werden, dass 010 nun plötzlich nicht mehr 8 ist. :-)
Ja, aber ich denke außerhalb von C-Hackern ist das nur ne Minderheit. Wesentlich mehr Leute würden bei 07 halt 7 erwarten, wie du ja auch bestätigt hast. Dafür haben wir ja die Präfixe, dass die "normalen" 10er-Basiszahlen weniger Überraschungen bieten. POLS und so.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

Ich finde es ebenfalls gut das das nicht mehr erlaubt ist mit führender 0.

Mal abgesehen davon habe ich ziemlich viele kleine Rechenfunktionieren von C portiert und der Oktalzahlenanteil im Source ist extrem gering.
Antworten