二次方程程序输出错误
用户需要输入A、B和C的值,然后计算出这个二次方程的根。但是从数学上来看,我的代码给出的答案是错误的:
print "Quadratic Formula Calculator!!!"
a = input("Please, enter value for A: ")
b = input("Please, enter value for B: ")
c = input("Please, enter value for C: ")
quad =(b**2 - 4 * a * c)
if quad >= 0:
quad ** 0.5
print "quad"
else:
print "can not compute"
solution1 = (-b + quad) / (2 * a)
solution2 = (b + quad) / (2 * a)
print " Solution 1!!!:", solution1
print " Soultion 2!!!:", solution2
3 个回答
1
solution1 = (-b + quad) / (2 * a)
solution2 = (b + quad) / (2 * a)
这应该是
solution1 = (-b + quad) / (2 * a)
solution2 = (-b - quad) / (2 * a)
这个公式是 -b 加上或减去平方根,而不是加上或减去 b 加上平方根。
2
在m0nhawk的回答基础上,Hooked的评论(还有维基百科)提供了一种方法,使用了专门处理复杂数的cmath库。
from math import pow
from cmath import sqrt
print "Quadradtic Formula Calculator!!!"
print "Ax²+Bx+C=0"
print "This will attempt to solve for x"
a = input("Please, enter value for A: ")
b = input("Please, enter value for B: ")
c = input("Please, enter value for C: ")
discriminant = sqrt(pow(b,2) - (4 * a * c))
if discriminant.imag != 0:
print "discriminant is imaginary"
else:
print " Solution 1!!!:", (-b + discriminant.real) / (2 * a)
print " Solution 2!!!:", (-b - discriminant.real) / (2 * a)
cmath.sqrt
会返回一个复杂数,这个复杂数有两个部分:.imag
和.real
。
4
你需要这个:
quad = quad ** 0.5
而不是仅仅 quad ** 0.5
。
解决方案是:
(-b + quad) / (2 * a)
(-b - quad) / (2 * a)
如果你无法计算判别式为负的值(其实是可以的,答案会是复数共轭值),那么就把计算和打印结果的部分放在 quad >= 0
里面。