刚开始使用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给我一个错误的答案?我的旧卡西欧计算器无法执行此操作...
Answers:
0123
非法且始终需要的原因之一0o123
。
0
后跟0-8的前缀是八进制的。0x
前缀后跟0-9a-f是十六进制。
0
后跟0- 7的前缀是八进制的:)
013
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
这主要只是扩展@Wim的答案,但是Python使用某些前缀指示整数文字的基础。如果没有前缀,则整数将被解释为以10为底。如果为“ 0x”,则整数将被解释为十六进制整数。完整的语法规范在这里,但是如果您不熟悉正式的语法,要理解它会有些棘手:http : //docs.python.org/2/reference/lexical_analysis.html#integers
该表从本质上说,如果要使用长值(即超过正常int容量的值),请在数字后加上字母“ L”或“ l”。如果您希望数字以十进制形式解释,请正常写数字(不带前导0);如果您希望将其解释为八进制,则将其前缀为“ 0”,“ 0o”或“ 0O”;如果要用十六进制,请在其前面加上“ 0x”;如果要使用二进制文件,请在其前面加上“ 0b”或“ 0B”。
int
(并且我可能实际上错了一个字头)-我自己的记忆可以追溯到相当远的距离确保2.4不需要它。但是,是的,如果您不依赖于尚未移植的任何库,那么通常值得推荐使用Python 3。