4

我是 Python 新手,我开始学习基础知识。我是 C++ 人,所以 // 运算符是新事物。根据我正在阅读的一本书:

>> 4/2
2.0
>> 2/4
0.5
>> 5//4
2
>> 2//4
0

问题是当我写5//4结果是 1 时,当我写4/2结果是 2 而不是 2.0 时,当我写2/4结果是 0 。我必须写“2.0/4.0”才能得到 0.5 作为结果。这些作者的错误还是我做错了什么?

我在 linux2 上使用 Python 2.7.4,[GCC 4.7.3]

4

4 回答 4

7

在 Python 2.x 中,默认的除法运算符是“经典除法”。这意味着/,当与整数运算符一起使用时,将导致类似于 C++ 或 java [ie 4/3 = 1] 的整数除法。

在 Python 3.x 中,这发生了变化。那里,/指的是“真正的划分”[ 4/3 = 1.3333..],而//用于请求“经典/楼层划分”。

如果你想在 Python 2.7 中启用“真除法”,你可以from __future__ import division在你的代码中使用。

资料来源:PEP 238

例如:

>>> 4/3
1
>>> 4//3
1
>>> from __future__ import division
>>> 4/3
1.3333333333333333
>>> 4//3
1
于 2013-06-13T17:57:29.250 回答
2

差异发生在 的情况下Python 3.x。在 Python 3.0 中,7 / 2将返回3.5并将7 // 2返回3。运算符/floating point division,运算符//floor divisioninteger division

但是如果Python 2.x没有任何区别并且我相信文本是错误的,这就是我得到的输出。

Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on 
win32 
Type "copyright", "credits" or "license()" for more information.
>>> 4/2
2
>>> 2/4
0
>>> 5//4
1
>>> 2//4
0
>>> 
于 2013-06-13T17:45:44.863 回答
0

//似乎工作正常,

请参阅有关运算符的本教程

// = Floor Division - 操作数的除法,结果是除去小数点后的数字的商。9//2 等于 4 和 9.0//2.0 等于 4.0

对于4/2等于2.0,您需要指定一个浮点数。例如:4/float(2)计算为2.0。整数42尚未定义为floats除法时。

希望能帮助到你!

于 2013-06-13T17:47:00.170 回答
0

在 python 2.7 和之前的版本中,除非有浮点数,否则 总是有整数除法。/ 和 // 在 python 2.7 和之前的版本中都是整数除法。

>>>4/3
1
>>>4//3
1
>>>4/2.0
2.0
>>> 4//1.5
2.0

在 python 3.2 及更高版本 中 / 用于浮点除法和 // 用于整数除法

>>>4/2
2
>>>4/2.0
2.0
>>>3/2
1.5

所以在python 2.7中,如果你想返回一个准确的浮点数,除数除数必须是浮点数,否则无论你使用什么符号进行除法/或//,你都会得到一个整数除法。如果你使用浮点数// 你会得到一个以 .0 结尾的整数。

在python 3.2++中,如果你想要一个整数除法,你使用//,如果你想要浮动除法,你使用/。

有关 python 版本之间的差异,请参阅此内容。

于 2013-06-13T18:03:43.330 回答