2016-06-17 23 views
1

Ich habe gerade angefangen pyhton Lernen und während mit Vergleichsoperatoren arbeiten, bekam ich diese Fehlermeldung, wenn ich den folgenden Code mit ausgeführt ‚==‘ Operator,Python: Syntaxfehler: Ungültige Token

40 == 0040.0 

in Wahr geführt, vom Dolmetscher und führte auch

40 == 40.0 

True

aber wenn ich ausgeführt, um den Code unten,

40 == 0040 

es throwed einen Fehler wie

File "stdin", line 1

40 == 0040

SyntaxError: invalid token

auf ungültige Zeichen zeigt Null Hinter.

Bitte helfen Sie mir zu verstehen, was passiert. Vielen Dank im Voraus.

+0

0040 als 000040 bereits als hexadezimal behandelt und wenn Sie int (0040) oder int (000040) erhalten Sie 32 – dmitryro

+0

@dmitryro Meinten Sie oktal? – shaktimaan

+0

@dmitryro 0040 ist ein SyntaxError, keine hexadezimale oder oktale Zahl (die letztere sollte '0o' anstelle von' 00' haben. Finde den Unterschied.) – Evert

Antwort

0

Python 3 erlaubt keine Zahlen mit führenden Nullen, um Verwechslungen mit Oktalwerten zu vermeiden. Wenn Sie führende Nullen haben müssen, verwenden Sie format().

Es ist klarer in Python 2, wo 40 == 0040 zu False auswertet.

EDIT: Beispiel von Link in Kommentar wurde:

>>> "{0:0>3}".format(1) '001'

Weitere Erläuterungen:

{0 : 0 > 3} │ │ │ │ │ │ │ └─ Width of 3 │ │ └─ Align Right │ └─ Fill with '0' └─ Element index

+0

Hallo Fleischraum, können Sie mir einmal zeigen, wie kann ich Format() verwenden? – Anil

+0

Dies erklärt es kurz: http://stackoverflow.com/questions/17118071/python-add-leading-zeroes-using-str-format – meatspace

0

Für Gleitkommazahlen werden führende Nullen akzeptiert, und sie einfach ignoriert (da sie tragen nichts als Lesbarkeit bei). Somit ist 0040.0 die Fließkommazahl 40.0.

Für ganze Zahlen sind, die Null am Anfang einer Reihe nimmt eine andere Bedeutung: auf das nächste Zeichen abhängig, es der Rest der Nummer gibt sollte als oktale (o oder O) interpretiert werden, hexadezimal (x oder X) oder Binärzahl (b oder B).
Wenn ein anderes Zeichen dem ersten 0 folgt, wird es ein SyntaxError sein. Das ist, was Sie für 0040 sehen: Es gibt keinen Hinweis, dass es eine Gleitkommazahl (kein 'e', ​​'d' oder ein Dezimalpunkt, '.') Sein sollte, noch ist die zweite Null ein Präfix für ein unterschiedliche Ganzzahlbasis.

Die genauen Definitionen für Gleitkomma- und Integerzahlen sind in der lexical analysis of the Python reference angegeben.


Die Ergebnisse Ihrer Vergleiche zu True Auswertung ist ein anderes Tier und zeigt nur, dass Gleitkomma 40 geschieht 40.

(Für wie und warum auf ganze Zahlen auf ganzzahlige eine genaue Darstellung, gleich zu sein und floats, siehe zum Beispiel die SO Frage, die nach the first integer that can't be represented by a float fragt.)

Verwandte Themen