126
x = 16

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

我知道我可以import math使用sqrt,但我正在寻找上述问题的答案。Python 2 中的整数除法是什么?此行为在 Python 3 中已修复。

4

5 回答 5

276

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

所以 x (1/2)等于 x (0),即 1。

这没有错,这是对不同问题的正确答案。

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

注意:在 Python 3 中不是这种情况,它将1/2是整数除法,而是整数除法。0.51//2

于 2012-03-07T02:50:51.330 回答
134

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

这种行为在 Python 2.x 中是“正常的”,而在 Python 3.x 中1/2计算结果为0.5. 如果您希望您的 Python 2.x 代码表现得像 3.x wrt 除法写入from __future__ import division- 那么1/2将评估为0.5并且为了向后兼容,1//2将评估为0.

为了记录,计算平方根的首选方法是:

import math
math.sqrt(x)
于 2012-03-07T02:51:57.510 回答
15

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

>>> 1/2
0

如果其中一个数字是浮点数,则它按预期工作:

>>> 1.0/2
0.5
>>> 16**(1.0/2)
4.0
于 2012-03-07T02:51:06.120 回答
8

你看到的是整数除法。要默认获得浮点除法,

from __future__ import division

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

sqrt = x**(1.0/2)
于 2012-03-07T02:52:16.470 回答
0

也许是一种简单的记忆方法:在分子(或分母)后加一个点

16 ** (1. / 2)   # 4
289 ** (1. / 2)  # 17
27 ** (1. / 3)   # 3
于 2018-04-06T02:23:54.453 回答