x = 16
sqrt = x**(.5) #returns 4
sqrt = x**(1/2) #returns 1
我知道我可以import math
使用sqrt
,但我正在寻找上述问题的答案。Python 2 中的整数除法是什么?此行为在 Python 3 中已修复。
x = 16
sqrt = x**(.5) #returns 4
sqrt = x**(1/2) #returns 1
我知道我可以import math
使用sqrt
,但我正在寻找上述问题的答案。Python 2 中的整数除法是什么?此行为在 Python 3 中已修复。
在 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.5
1//2
您必须写: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)
/
在 Python 2 中执行整数除法:
>>> 1/2
0
如果其中一个数字是浮点数,则它按预期工作:
>>> 1.0/2
0.5
>>> 16**(1.0/2)
4.0
你看到的是整数除法。要默认获得浮点除法,
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