我刚开始学习Python,所以这可能是我的错误,但是......
我正在尝试使用Python。我喜欢将其用作计算器,并且正在逐步完成一些教程。
今天我遇到了奇怪的事情。我想找出2013 * 2013,但我写错了,写成了2013 * 013,结果得到了这个:
>>> 2013*013
22143
我用计算器检查了一下,22143是错误的答案!2013 * 13应该是26169。
为什么Python会给我一个错误的答案?我的老卡西欧计算器不会有这种情况...
我刚开始学习Python,所以这可能是我的错误,但是......
我正在尝试使用Python。我喜欢将其用作计算器,并且正在逐步完成一些教程。
今天我遇到了奇怪的事情。我想找出2013 * 2013,但我写错了,写成了2013 * 013,结果得到了这个:
>>> 2013*013
22143
我用计算器检查了一下,22143是错误的答案!2013 * 13应该是26169。
为什么Python会给我一个错误的答案?我的老卡西欧计算器不会有这种情况...
0123
语法视为非法,而总是要求使用0o123
的原因之一。 - Tim Pietzcker0
前缀后跟 0-8 的数字表示的是八进制。以 0x
前缀后跟 0-9a-f 的数字表示的是十六进制。 - Joe Frambach0
前缀后跟0-7是八进制数 :) - Mark Tolonen013
是一个八进制整数字面量(等同于十进制整数字面量 11
),因为它具有前导的 0。
>>> 2013*013
22143
>>> 2013*11
22143
>>> 2013*13
26169
在我熟悉的大多数语言中,八进制整数字面量通常以0
开头,十六进制整数字面量通常以0x
开头。由于您经历的确切混淆,Python 3会引发SyntaxError错误:
>>> 2013*013
File "<stdin>", line 1
2013*013
^
SyntaxError: invalid token
而需要使用0o
或0O
代替:
>>> 2013*0o13
22143
>>> 2013*0O13
22143
Python中的“前导零”八进制字面量语法是一个常见的陷阱:
Python 2.7.3
>>> 010
8
Python 3.x 的语法发生了变化,具体可见 http://docs.python.org/3.0/whatsnew/3.0.html#integers
int
更大的值(我可能错了,也许没有这样的版本)- 我自己的记忆可以回溯到 2.4,我相当确定它不需要。但是,如果您不依赖尚未移植的任何库,Python 3通常是值得转换的。 - lvc