刚开始使用Python,所以这可能是我的错误,但是...
我正在试用Python。我喜欢把它当做计算器使用,我正在慢慢地学习一些教程。
我今天遇到了一些奇怪的事情。我想找出2013*2013,但我写错了东西,写成了2013*013,结果是这样的:
>>> 2013*013
22143
我用我的计算器检查了一下,22143是错误的答案!2013 * 13应该是26169。
为什么Python给了我一个错误的答案?我的旧卡西欧计算器不能做这个。
发布于 2013-04-09 13:52:23
由于前导0,013
是一个八进制整数文字(相当于十进制整数文字11
)。
>>> 2013*013
22143
>>> 2013*11
22143
>>> 2013*13
26169
八进制整数文字以0
开头,十六进制整数文字以0x
开头是非常常见的(当然在我熟悉的大多数语言中都是如此)。由于您所经历的完全混乱,Python3引发了一个SyntaxError:
>>> 2013*013
File "<stdin>", line 1
2013*013
^
SyntaxError: invalid token
并且需要使用0o
或0O
:
>>> 2013*0o13
22143
>>> 2013*0O13
22143
发布于 2013-04-10 06:12:23
Python用于八进制文字的“前导零”语法是一个常见的陷阱:
Python 2.7.3
>>> 010
8
Python 3.x http://docs.python.org/3.0/whatsnew/3.0.html#integers中的语法已更改
发布于 2013-04-09 14:01:16
这在很大程度上只是对@Wim的回答进行了一点扩展,但Python使用某些前缀来表示整数字面量的基础。如果没有前缀,整数将被解释为以10为基数。对于"0x",整数将被解释为十六进制整数。完整的语法规范在这里,尽管如果您不熟悉形式语法就有点难以理解:http://docs.python.org/2/reference/lexical_analysis.html#integers
这张表基本上是说,如果你想要一个长值(即一个超过普通int的容量的值),请写数字,后跟字母"L“或"l";如果你想用十进制解释数字,请正常写数字(没有前导0);如果你想用八进制解释,请在它前面加上"0”、"0o“或"0O";如果你想用十六进制,请在它前面加上"0x";如果你想用二进制,请在它前面加上"0B”或"0b“。
https://stackoverflow.com/questions/15894182
复制相似问题