为什么我的整数被python看作一个复数?

时间:2015-10-01 19:05:23

标签: python

我刚刚开始使用Python编写课程并尝试此代码:

import math

c = int(input('Enter number: '))

a = 1

counter = 0

while counter != 2:
    a = a + 1
    b = round((c-(a**3))**(1/3.0))

    if a < b and a**3 + b**3 == c:
        counter = counter + 1
        print(a,b)

我的问题是蟒蛇不能绕过&#39; b&#39;因为它被视为一个复数...

该程序应该找到两组a&amp; b满足^ 3 + b ^ 3 = c,我的代码上的任何反馈都是值得赞赏的。

2 个答案:

答案 0 :(得分:0)

基本上,将负数提高到分数幂会产生复数。例如,sqrt(-1)(即(-1)**(1/2))显然很复杂。

所以,如果你试图将-8提高到1/3的幂,你就会得到一个复数。例如:

a = (-8)**(1/3)
print(a)
print(a**3)

将打印

(1.0000000000000002+1.7320508075688772j)
(-8+3.1086244689504383e-15j)

当提升到3级时,它会给予-8,给予或采取一些舍入。

这种四舍五入是真正的问题。你可以说-8到1/3的功率是-2,因为-2到3的功率是-8。然而 - 这就是关键 - 只有在功率实际为1/3时才有效。在浮点数中,它实际上将是0.33333(有更多三分之一),这不完全相同。因此,取幂是用复数来完成的。

你要么必须使用复数,要么重写你的数学不使用负数的分数幂。

答案 1 :(得分:-2)

你需要保护你的计算,使^ 3大于c;这就是返回复数的原因。也许

while counter != 2 and c >= a**3:

另外,为什么还要等待两个解决方案? “反击”让我感到困惑......如果你只需要一个解决方案,你可以使用布尔标志。