Python对分数的指数计算



我正在尝试计算 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

最新更新