1

私がやろうとしているのは、二次方程式ソルバーを書くことですが、-1quadratic(2, 4, 2)1

私は何を間違っていますか?

#!/usr/bin/python
インポート数学
def quadratic(a, b, c):
        #a = raw_input("'a' の値は?\t")
        #b = raw_input("`b` の値は?\t")
        #c = raw_input("`c` の値は?\t")
        a、b、c = float(a)、float(b)、float(c)
        ディスク = (b*b)-(4*a*c)
        print "判別式:\n" + str(disc)
        ディスクの場合 >= 0:
                ルート = math.sqrt(ディスク)
                top1 = b + ルート
                top2 = b - ルート
                sol1 = トップ 1/(2*a)
                sol2 = トップ 2/(2*a)
                sol1 != sol2 の場合:
                        print "ソリューション 1:\n" + str(sol1) + "\nソリューション 2:\n" + str(sol2)
                sol1 == sol2 の場合:
                        print "1 つの解:\n" + str(sol1)
        そうしないと:
                print "解決策なし!"

編集:次を返します...

>>> 数学モジュールをインポート
>>> mathmodules.quadratic(2, 4, 2)
判別式は次のとおりです。
0.0
1 つの解決策:
1.0
4

4 に答える 4

12

私が学校に通ってから数式が変更されていない限り (あまり確実ではありません)、それ(-b +- sqrt(b^2-4ac)) / 2abです。

[編集] リファクタリングを提案してもいいですか?

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 に答える