题目:输入三个数,求一元二次方程ax**2 + bx +c = 0的解
# 一元二次方程计算程序,接受a、b、c的值,输出二元一次方程结果。
import math
def calculate(a,b,c):
#计算一元二次方程
shi = b*b - 4*a*c
if shi >= 0:
shi = math.sqrt(shi)
result1 = (-b+shi)/(2*a)
result2 = (-b-shi)/(2*a)
return print('x1={},x2={}。'.format(result1,result2))
else:
return print('这个式子无解。')
while True:
abc = []
for i in range(3):
a = input("请依次输入abc的值(这是第{}次输入):".format(i+1))
abc.append(a)
a,b,c = map(int,abc)
calculate(a,b,c)
flag = input('输入‘q’退出,输入其他键继续:')
if flag == 'q':
break
第一版遭遇了“ValueError: math domain error”错误,原因是在判别式里直接计算了二次方根,出现了根号内小于零的数学错误。
shi = math.sqrt(b*b - 4*a*c)
将二次方根计算移到条件判断之后就解决了。
shi = b*b - 4*a*c
if shi >= 0:
shi = math.sqrt(shi)