我在二次方程的语法和根计算上总是遇到问题

-3 投票
3 回答
591 浏览
提问于 2025-04-17 01:27

你好,我在用Python的复数功能计算二次方程的根时遇到了问题。

当我尝试这样做:

>>> if root<0:
        root=abs(complex(root))
        j=complex(0,1)
        x1=(-b+sqrt(root))/2*a
        x2=(-b-j+sqrt(root))/2*a
        else:

我收到的错误信息是:

SyntaxError: invalid syntax

然后,当我尝试另外一种方式:

>>> if root<0:
        root=abs(complex(root))
        j=complex(0,1)
        x1=(-b+j+sqrt(root))/2*a
        x2=(-b-j+sqrt(root))/2*a
        break

我又遇到了这个错误:

SyntaxError: 'break' outside loop

我想把:

else:
    x1=(-b+j+sqrt(root))/2*a
    x2=(-b-j+sqrt(root))/2*a

放在下面,但它就是不工作。

请问有什么帮助吗?

3 个回答

0

正如@bythenumbers提到的,你的if和elif条件是一样的。另外,你是遇到了异常情况还是得到了错误的值呢?还有,在你写的j+sqrt(root)那里,你是不是想写j*sqrt(root)呢?

1

试着导入一个叫做复杂数学模块的东西,这个模块在网上有很多种形式可以找到。我记得在标准的Python版本里就有处理复杂数的功能,还有numpy和scipy这两个库里也有。你也可以尝试分别计算一下根的实部和虚部(可以通过判断判别式的值来进行测试)。另外,你的if和elif条件判断是一样的。

2

我不太明白你的问题,但看起来你没有正确缩进——在Python中,空格用来标记代码块,所以上面的代码应该像这样:

if root<0:
    root=abs(complex(root))
    j=complex(0,1)
    x1=(-b+j+sqrt(root))/2*a
    x2=(-b-j+sqrt(root))/2*a
else:
    x1=(-b+j+sqrt(root))/2*a
    x2=(-b-j+sqrt(root))/2*a

不过这也不太合理,因为x1x2在两个分支中计算方式是一样的,而jelse分支中没有定义……所以也许你真正想要的是:

if root<0:
    root=abs(complex(root))
j=complex(0,1)
x1=(-b+j+sqrt(root))/2*a
x2=(-b-j+sqrt(root))/2*a

我有点困惑的是提示信息:enter code here——这不是标准的Python提示,所以要么是你改了提示,要么是你在用其他程序来运行Python。不管怎样,希望这能帮到你。

撰写回答