二次函数的根:数学域误差
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]
我想定义一个 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]