为什么在python中打印错误的数字?

时间:2014-02-23 04:19:47

标签: python python-2.7 numbers

在我的python脚本中,我执行以下操作:

>>> x = 0123456

但是,当我打印出来时,就会出现这样的结果:

>>> x = 0123456
>>> print x
42798

这是否与前面的零有关?或者只是我的电脑?

2 个答案:

答案 0 :(得分:2)

以0开头的数字文字被视为八进制数。你可以像这样实现它

print int("123456", 8)   # 42798

我们要求int函数将数字123456视为基数为8的数字。

注意这只适用于Python 2.7。因为在Python 2.7中,octal numbers are defined like this

octinteger     ::=  "0" ("o" | "O") octdigit+ | "0" octdigit+

但是in Python 3.x, this is changed to

octinteger     ::=  "0" ("o" | "O") octdigit+

因此,在Python 3.x中,这将被视为语法错误,

x = 0123456
# SyntaxError: invalid token

如果您要在代码中表示八进制数字,则应该

x = 0o123456    # Remember the o (for octal) after the first 0

这适用于Python 2.7和3.x

答案 1 :(得分:1)

前导0表示它被解释为八进制数。 Octal 0123456的小数是42798。同样,如果您有x = 0x123456,则打印出1193046,因为0x表示它是十六进制数。