我是python的新手,但我正在努力学习。我的代码是
import math
a = 5
b = 5
c = 5
def quad_solve(a, b, c):
q1 = b*b
q2 = 4*a*c
q3 = 2*a
q4 = q1-q2
sqr = math.sqrt(q4)
sol1p1 = b+sqr
sol1p2 = sol1p1/2
sol2p1 = b-sqr
sol2p2 = sol2p1/2
print ("(",sol1p2,",",sol2p2,")")
quad_solve(a, b, c)
当我运行它会给出错误
Traceback (most recent call last):
File "python", line 19, in <module>
File "python", line 12, in quad_solve
ValueError: math domain error
我不太了解。
我正在尝试创建二次方公式求解器。我使用数学模块,然后定义三个变量,a,b和c。然后,我定义一个接受这些变量的函数(我在最后调用该函数)。在函数中,我定义了四个数量。
q1
是平方根下的b平方,q2
是也在平方根下的4ac,q3
是分母,q4
计算平方根下的总数(即q1
-q2
)。然后,我定义一个名为sqr
的变量,该变量等于q4
的平方根。然后,我再定义四个变量,这些变量将计算解决方案。 sol1p1
取b + sqr,sol1p2
取sol1p1
并将其除以二。这给出了第一个解决方案。然后,sol2p1
取b-sqr,sol2p2
取sol2p1
并将其除以二。最后,将sol1p2
和sol2p2
打印在一组括号之间,中间用逗号隔开。我希望这是有道理的;如果需要有关变量名称的任何说明,请告诉我。我正在使用在线编译器repl.it(我不知道是否有任何特殊的考虑)。
谢谢!
编辑:
我已按照“代码学徒”的建议更新了代码。我首先添加了一个if语句:
import math
a = 5
b = 5
c = 5
def quad_solve(a, b, c):
q1 = b*b
q2 = 4*a*c
q3 = 2*a
q4 = q1-q2
check = math.tan(q2)
if (q1 > check):
sqr = math.sqrt(q4)
sol1p1 = b+sqr
sol1p2 = sol1p1/2
sol2p1 = b-sqr
sol2p2 = sol2p1/2
print ("(",sol1p2,",",sol2p2,")")
else:
print "Imaginary number. There are no zeros."
quad_solve(a, b, c)
但是它继续返回错误
Traceback (most recent call last):
File "python", line 23, in <module>
File "python", line 14, in quad_solve
ValueError: math domain error
我不知道为什么。
最佳答案
这是我用最少的几行代码回答的版本:
import cmath
#Your Variables
a = 5
b = 5
c = 5
#The Discriminant
d = (b**2) - (4*a*c)
#The Solutions
solution1 = (-b-cmath.sqrt(d))/(2*a)
solution2 = (-b+cmath.sqrt(d))/(2*a)
print (solution1)
print (solution2)