二次函数的根:数学域错误

时间:2018-06-03 21:33:54

标签: python python-3.x

我想定义一个返回根值的函数。应该总是回归。

如果b ** 2 - 4 * a * c< 0,然后它应该返回[],但它显示为错误。

我的代码现在是这样的:

    from math import*
    def solve(a, b, c):
        x = sqrt(b**2 - 4*a*c)

        if x > 0:
           x1 = (-b + x)/(2*a)
           x2 = (-b - x)/(2*a)
           return [x1, x2]

        elif x == 0:
           x1 = x2 = -b/(2*a)
           return [x1]

       else:
           return []

谢谢!

2 个答案:

答案 0 :(得分:1)

sqrt不接受负值。为避免这种情况,您可以查看“其他”内容。计算平方根之前的条件:

from math import*
def solve(a, b, c):

    formula = b**2 - 4*a*c

    if formula < 0:
       return []

    x = sqrt(formula)

    if x > 0:
       x1 = (-b + x)/(2*a)
       x2 = (-b - x)/(2*a)
       return [x1, x2]

    elif x == 0:
       x1 = x2 = -b/(2*a)
       return [x1]

答案 1 :(得分:0)

负数的sqrt不是由math模块的sqrt函数定义的,因此返回ValueError。请改用x ** 0.5。如果x为负数,则返回复数

x=(b**2-4*a*c)**0.5

否则这样做:

from cmath import sqrt
x=sqrt(b**2-4*a*c)

它还会返回负数的复数值

我希望有所帮助!