23

当我在终端尝试这个时

>>> (-3.66/26.32)**0.2

我收到以下错误

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: negative number cannot be raised to a fractional power

但是,我可以通过两个步骤来做到这一点,例如,

>>> (-3.66/26.32)
-0.13905775075987842
>>> -0.13905775075987842 ** 0.2
-0.6739676327771593

为什么会有这种行为?单行解决这个问题的方法是什么?

4

2 回答 2

20

提高幂优先于一元减号。

所以你有-(0.13905775075987842 ** 0.2)而不是(-0.13905775075987842) ** 0.2你期望的:

>>> -0.13905775075987842 ** 0.2
-0.6739676327771593
>>> (-0.13905775075987842) ** 0.2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: negative number cannot be raised to a fractional power

如果你想让它工作,你应该写(-3.66/26.32 + 0j)**0.2

>>> (-3.66/26.32 + 0j)**0.2
(0.5452512685753758+0.39614823506888347j)

或者按照@TimPietzcker 的说明切换 Python 3。

于 2013-07-19T13:26:37.913 回答
8

切换到 Python 3,它会自动将结果提升为复数:

>>> (-3.66/26.32)**0.2
(0.5452512685753758+0.39614823506888347j)
于 2013-07-19T13:27:51.547 回答