为什么 Python 给出了平方根的“错误”答案? Python 2中的整数除法是什么?

x = 16


sqrt = x**(.5)  #returns 4
sqrt = x**(1/2) #returns 1

我知道我可以 import math和使用 sqrt,但我正在寻找一个答案以上。什么是 Python2中的整数除法?这种行为在 Python3中是固定的。

501816 次浏览

在 Python2中,sqrt=x**(1/2)进行整数除法。

所以 x(1/2)等于 x(0)也就是1。

It's not wrong, it's the right answer to a different question.

如果您想在不导入数学模块的情况下计算平方根,则需要使用 x**(1.0/2)x**(1/2.)。其中一个整数需要是浮点数。

注意: 在 Python3中不是这种情况,其中 1/2将是 0.5,而 1//2将是整数除法。

/在 Python 2中执行整数除法:

>>> 1/2
0

If one of the numbers is a float, it works as expected:

>>> 1.0/2
0.5
>>> 16**(1.0/2)
4.0

必须写: sqrt = x**(1/2.0),否则执行整数除法,表达式 1/2返回 0

在 Python 2.x 中,这种行为是“正常的”,而在 Python 3.x 中,1/2的计算结果是 0.5。如果您希望 Python 2.x 代码的行为类似于3.x w.r.t. 除法编写 from __future__ import division-那么 1/2将计算为 0.5,而为了向后兼容性,1//2将计算为 0

根据记录,计算平方根的首选方法是这样的:

import math
math.sqrt(x)

你看到的是整数除法,

from __future__ import division

或者,您可以将1/2的1或2转换为浮点值。

sqrt = x**(1.0/2)

也许有一个简单的记住方法: 在分子(或分母)后面加一个点

16 ** (1. / 2)   # 4
289 ** (1. / 2)  # 17
27 ** (1. / 3)   # 3