1

我想做的是写一个二次方程求解器,但是当解决方案应该是-1,因为quadratic(2, 4, 2)它返回1

我究竟做错了什么?

#!/usr/bin/python
导入数学
def 二次(a,b,c):
        #a = raw_input("你的 `a` 值是多少?\t")
        #b = raw_input("你的 `b` 值是多少?\t")
        #c = raw_input("你的 `c` 值是多少?\t")
        a, b, c = 浮点数(a), 浮点数(b), 浮点数(c)
        圆盘 = (b*b)-(4*a*c)
        print "判别式是:\n" + str(disc)
        如果光盘 >= 0:
                根 = math.sqrt(光盘)
                top1 = b + 根
                top2 = b - 根
                sol1 = top1/(2*a)
                sol2 = top2/(2*a)
                如果 sol1 != sol2:
                        打印 "解决方案 1:\n" + str(sol1) + "\n解决方案 2:\n" + str(sol2)
                如果 sol1 == sol2:
                        print "一个解决方案:\n" + str(sol1)
        别的:
                打印“没有解决方案!”

编辑:它返回以下...

>>> 导入数学模块
>>> mathmodules.quadratic(2, 4, 2)
判别式是:
0.0
一种解决方案:
1.0
4

4 回答 4

12

除非自从我上学后公式发生了变化(永远无法确定),否则你的代码中(-b +- sqrt(b^2-4ac)) / 2a就有。b

[编辑] 我可以建议重构吗?

def quadratic(a, b, c):
    discriminant = b**2 - 4*a*c
    if discriminant < 0:
      return []
    elif discriminant == 0:
      return [-b / (2*a)]
    else:
      root = math.sqrt(discriminant)
      return [(-b + root) / (2*a), (-b - root) / (2*a)]

print quadratic(2, 3, 2) # []
print quadratic(2, 4, 2) # [-1]                    
print quadratic(2, 5, 2) # [-0.5, -2.0]
于 2011-01-15T18:34:26.563 回答
2

二次方程的解是

x = (-b +/- sqrt(b^2 - 4ac))/2a

但你编码的是

x = (b +/- sqrt(b^2 - 4ac))/2a

所以这就是你得到符号错误的原因。

于 2011-01-15T18:35:47.347 回答
1

top1和的符号top2是错误的,请参阅http://en.wikipedia.org/wiki/Quadratic_equation

于 2011-01-15T18:38:24.513 回答
0
top1 = b + root
top2 = b - root

应该:

top1 = -b + root
top2 = -b - root
于 2011-01-15T18:38:16.197 回答