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

Roots of a quadratic function: math domain error

我想定义一个 return 根值的函数。它应该 return 总有一些东西。

如果 b**2 - 4ac < 0,则应该 return [ ],但显示为错误。

我的代码现在是这样的:

    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 []

math.sqrt 未定义负数,因此 return 是 ValueError

如果您希望 return 负数的复数平方根,请使用 x**0.5:

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

或者使用 cmath.sqrt 实现:

from cmath import sqrt

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

sqrt 不接受负值。为避免这种情况,您可以在计算平方根之前检查您的 'else' 条件:

from math import sqrt

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]