我正在尝试计算 27^(1/3) = 3。但结果并不像预期的那样。
>>> 27 ** (1/3)
1
>>> 27 ** (1/3.)
3.0
首先,为什么第一次计算会产生 1,是因为 1/3 被强制转换为 int 所以它等于零吗?
其次,"."在 Python 中通常是什么意思,我可以在任何数字后附加一个点以将其从 int 转换为双精度吗?
谢谢。
首先,为什么第一次计算会得到 1,是因为 1/3 被转换为整数,所以它等于零?
是的,就是这样。
一般来说,"."在 Python 中是什么意思,我可以在 Python 中附加一个点吗 任何数字才能将其从 int 转换为双倍?
.
明确地使数字成为浮点数,因为1.0
反对只是1
。
你在 python 2 中遇到整数除法。
在 Python 2 中:
>>> 2/3
0
在 python 3 中:
>>> 2/3
0.6666666
如果你想要 python2 中的 python3 行为,你可以做
from __future__ import division
作为您的第一次导入。
对于整数除法,请使用
>>> 2 // 3
0
或者您可以使用2.0 / 3.0
来使用float
s。
在python 2.x中,除整数默认为下限除法,因此任何非整数商都会自动向下舍入到最接近的整数,例如
>>> 1/3
0
>>> 5/2
2
因此,当您尝试计算 27 ** (1/3) 时,您只是在计算 27 ** 0
这个问题有很多解决方法,最简单的方法是只在指数中使用浮点数 - (1.0/3.0),甚至只是 (1/3.0)。但是,如果您要进行大量这些计算,则不断以浮点形式键入所有数字可能会变得烦人。在这种情况下,您可以使用 future 模块来利用 Python 3.x 除法行为,这始终会产生浮点值:
>>> from __future__ import division
>>> 1/3
0.3333333333333333
这样,计算将永远不会默认为楼层划分。如果在某些时候你想在同一程序中进行楼层除法,你可以使用//运算符来获取类似于 python 2.x 整数除法的行为,如下所示:
>>> 1//3
0