二次方程程序输出错误

2 投票
3 回答
1331 浏览
提问于 2025-04-17 15:40

用户需要输入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 里面。

撰写回答