首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python的数学错误?

Python的数学错误?
EN

Stack Overflow用户
提问于 2013-04-09 13:46:41
回答 3查看 4.9K关注 0票数 78

刚开始使用Python,所以这可能是我的错误,但是...

我正在试用Python。我喜欢把它当做计算器使用,我正在慢慢地学习一些教程。

我今天遇到了一些奇怪的事情。我想找出2013*2013,但我写错了东西,写成了2013*013,结果是这样的:

代码语言:javascript
复制
>>> 2013*013
22143

我用我的计算器检查了一下,22143是错误的答案!2013 * 13应该是26169。

为什么Python给了我一个错误的答案?我的旧卡西欧计算器不能做这个。

EN

回答 3

Stack Overflow用户

发布于 2013-04-09 13:52:23

由于前导0,013是一个八进制整数文字(相当于十进制整数文字11)。

代码语言:javascript
复制
>>> 2013*013
22143
>>> 2013*11
22143
>>> 2013*13
26169

八进制整数文字以0开头,十六进制整数文字以0x开头是非常常见的(当然在我熟悉的大多数语言中都是如此)。由于您所经历的完全混乱,Python3引发了一个SyntaxError:

代码语言:javascript
复制
>>> 2013*013
  File "<stdin>", line 1
    2013*013
           ^
SyntaxError: invalid token

并且需要使用0o0O

代码语言:javascript
复制
>>> 2013*0o13
22143
>>> 2013*0O13
22143 
票数 36
EN

Stack Overflow用户

发布于 2013-04-10 06:12:23

Python用于八进制文字的“前导零”语法是一个常见的陷阱:

代码语言:javascript
复制
Python 2.7.3
>>> 010
8

Python 3.x http://docs.python.org/3.0/whatsnew/3.0.html#integers中的语法已更改

票数 7
EN

Stack Overflow用户

发布于 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“。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15894182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档