Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python的数学错误?_Python_Python 2.7_Math - Fatal编程技术网

Python的数学错误?

Python的数学错误?,python,python-2.7,math,Python,Python 2.7,Math,只是从Python开始,所以这可能是我的错误,但是 我正在试用Python。我喜欢把它用作计算器,我正在慢慢地学习一些教程 我今天遇到了一些奇怪的事情。我想知道2013*2013,但我写错了,写了2013*013,得到了这个: >>> 2013*013 22143 我用计算器检查了一下,22143是错误的答案!2013*13应该是26169 为什么Python给了我一个错误的答案?我的旧卡西欧计算器不这样做…因为八进制运算,013实际上是整数11 >>> 0

只是从Python开始,所以这可能是我的错误,但是

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

我今天遇到了一些奇怪的事情。我想知道2013*2013,但我写错了,写了2013*013,得到了这个:

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


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

因为八进制运算,013实际上是整数11

>>> 013
11
对于前导零,
013
被解释为基数为8的数字,1*81+3*80=11

注意:这种行为是错误的。这里有一段特别恰当的引语

整数的默认八进制表示法会让人感到困惑 不熟悉类C语言的人。这是非常容易做到的 无意中创建了一个具有错误值的整数对象,因为 对于Python语言,“013”表示“十进制11”,而不是“十进制13” 它本身,这不是大多数人赋予它的意义 文字


013
是一个八进制整数文本(相当于十进制整数文本
11
),因为前导为0

>>> 2013*013
22143
>>> 2013*11
22143
>>> 2013*13
26169
八进制整数文本以
0
开头,十六进制整数文本以
0x
开头是非常常见的(当然在我所熟悉的大多数语言中都是如此)。由于您所经历的混乱,Python 3引发了一个语法错误:

>>> 2013*013
  File "<stdin>", line 1
    2013*013
           ^
SyntaxError: invalid token

这主要是对@Wim的答案进行了一些扩展,但是Python使用某些前缀表示整数文本的基础。如果没有前缀,整数将被解释为以10为基数。使用“0x”,整数将被解释为十六进制整数。完整的语法规范在这里,但如果您不熟悉正式语法,则理解起来有点困难:


该表实质上是说,如果您想要一个长值(即超过正常整数容量的值),请在数字后面写上字母“L”或“L”;如果您希望您的数字以十进制表示,请正常写入数字(无前导0);如果你想把它解释成八进制,在它前面加上“0”、“0o”或“0o”;如果需要十六进制格式,请在其前面加上“0x”;如果您希望它是二进制的,请在它前面加上“0b”或“0b”。

Python对八进制文本的“前导零”语法是一个常见的问题:

Python 2.7.3
>>> 010
8


Python3.x中的语法发生了更改

@JamesElegan:也许这就是Python3将
0123
语法设置为非法的原因之一,并且总是需要
0o123
。是的,
0
前缀后面跟0-8是八进制<代码>0x前缀后面跟0-9a-f是十六进制。为什么程序员总是混淆万圣节和圣诞节?因为DEC25==OCT31!Nyuk-Nyuk-Nyuk@JoeFrambach,
0
前缀后跟0-7是八进制:)仁慈的独裁者在第一轮时没有正确地从Lisp中复制。这些事情必须清晰明了:#xFF,#o777,#b1011。谢谢你的回答!我觉得这个八进制的东西有点让人困惑,但至少现在我知道了:)不客气。正如我和@wim的回答中所指出的,Python社区正在尽其所能减少新手对Python3的八进制文字的混淆。不过,要注意这是一件非常好的事情——您可以确定,无论是在Python 2.X还是其他语言中,您都会再次遇到带0前缀的八进制文字。PEP 3127在这方面是一本稍微有趣的读物。。。e、 g.“一个新的Python用户(目前)可能会对他的数字不能正常工作的延迟发现感到困惑,我们可以立即向他解释Python不喜欢前导零(希望有一个合理的消息!),或者我们可以将这种教学经验委托给Internet Explorer浏览器中的JavaScript解释器,让他尝试在那里调试他的问题。”Python似乎在自动添加L,当我输入非常大的数字时(比如999999999999999999999999,但不像3333333333)。有没有时间我必须自己添加它?@JamesElegan,前提是你使用的是一个非常旧的Python版本。在Python3中,L完全消失了,int和long类型之间的所有其他区别都消失了?因此,我永远不需要添加L。(我不断听到关于Python 3的好消息,也许我应该安装并使用它?@JamesElegan我找不到任何确切的信息,关于哪个以前的版本需要大于
int
的文本后缀(我可能对有一个后缀是错误的)-我自己的记忆可以追溯到2.4不需要它的时候。但是,如果您不依赖任何尚未移植的库,那么Python 3通常是值得使用的;事实上,2.7.4本周末刚刚发布。Python3与Python2有着本质上的不同,但最终大多数Python代码将在不久的将来以Python3代码的形式编写,或者至少,这似乎是我们的目标。所以,如果你刚开始学习,你可以选择学习哪一个,我推荐3或者2和3.related:+1,让你真正注意到。我知道这是一个八进制数,但如果我不知道的话,我现在会认为2013*13是22143。你怎么会发现答案是错误的?高中时我做过一段时间的心算,我认为22143比它应该的小了一点。因此,我用我可靠的计算器检查了一下。+1表示相信你的好奥勒诺金。@11684如果两个数字的最后一位都是3,则乘积的最后一位必须是9。小学数学。。。
Python 2.7.3
>>> 010
8