python - возвращает неверный позитив # - PullRequest
1 голос
/ 15 января 2011

что я пытаюсь сделать, это написать решатель квадратного уравнения, но когда решение должно быть -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

Ответы [ 4 ]

12 голосов
/ 15 января 2011

Если формула не изменилась с тех пор, как я пошел в школу (никто не может быть слишком уверен), это (-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]
2 голосов
/ 15 января 2011

Решение квадратичного:

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

, но вы закодировали это

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

Так вот почему вы получаете ошибку знака.

1 голос
/ 15 января 2011

Знаки top1 и top2 неверны, см. http://en.wikipedia.org/wiki/Quadratic_equation

0 голосов
/ 15 января 2011
top1 = b + root
top2 = b - root

Должно быть:

top1 = -b + root
top2 = -b - root
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...