我想做的是写一个二次方程求解器,但是当解应该是 -1 时,如 quadratic(2, 4, 2) 它返回 1
我做错了什么?
#!/usr/bin/python
import math
def quadratic(a, b, c):
#a = raw_input("What\'s your `a` value?\t")
#b = raw_input("What\'s your `b` value?\t")
#c = raw_input("What\'s your `c` value?\t")
a, b, c = float(a), float(b), float(c)
disc = (b*b)-(4*a*c)
print "Discriminant is:\n" + str(disc)
if disc >= 0:
root = math.sqrt(disc)
top1 = b + root
top2 = b - root
sol1 = top1/(2*a)
sol2 = top2/(2*a)
if sol1 != sol2:
print "Solution 1:\n" + str(sol1) + "\nSolution 2:\n" + str(sol2)
if sol1 == sol2:
print "One solution:\n" + str(sol1)
else:
print "No solution!"
编辑:它返回以下...
>>> import mathmodules >>> mathmodules.quadratic(2, 4, 2) Discriminant is: 0.0 One solution: 1.0
请您参考如下方法:
除非自从我上学以来公式发生了变化(一个人永远不会太确定),它是 (-b +- sqrt(b^2-4ac))/2a,你有 b 在你的代码中。
[edit] 我可以建议重构吗?
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]
