Как написать простую программу вычисления квадратных уравнений на Python?

Недавно принялся за изучение python по книге Лутца и курсу codecademy (мой первый опыт в программировании). Попробовал написать простую программу вычисления квадратных уравнений:

a = input('Введите а:')
b = input('Введите b:')
c = input('Введите c:')
if len(a) > 0 and len(b) > 0 and len(c) > 0 and not a.isalpha() and not b.isalpha() and not c.isalpha():
    d = int(b) ** 2 - 4 * int(a) * int(c)
    if d > 0 or d == 0:
        import math
        dd = math.sqrt(d)
        x = - int(b) - int(dd) / (int(a) * 2)
        x1 = - int(b) + int(dd) / (int(a) * 2)
        print (x, x1)
    else:
        print ('Рещений не имеет')
else:
    print ('Введите только числа')


Собственно, иксы вычисляет неверно, до этого всё выполняется корректно.

Объясните, пожалуйста, в чём моя ошибка?
  • Вопрос задан
  • 11215 просмотров
Решения вопроса 2
FloppyFormator
@FloppyFormator
x = ( -int(b) - int(dd) ) / (int(a) * 2)
x1 = ( -int(b) + int(dd) ) / (int(a) * 2)
Ответ написан
adugin
@adugin Куратор тега Python
1) Надо использовать float(), а не int()
2) Конструкция 'from __future__ import division' тоже может пригодиться.

>>> from math import sqrt
>>> def solver():
    try:
        a, b, c = map(float, raw_input('Введите a, b, c через пробел: ').split())
    except:
        print 'На колу мочало - начинай сначала!'
    else:
        d = b*b - 4*a*c
        if d >= 0:
            sd = sqrt(d)
            root = lambda k: '{:.6f}'.format((-b+k*sd)/(2*a))
            solution = ' и '.join(set(map(root, (-1,1))))
        else:
            solution = 'уравнение не имеет решений'
        print 'Ответ: %s' % solution

>>> solver()
Введите a, b, c через пробел: 1, 2 3
На колу мочало - начинай сначала!
>>> solver()
Введите a, b, c через пробел: 1 2 3
Ответ: уравнение не имеет решений
>>> solver()
Введите a, b, c через пробел: 4 9 1
Ответ: -0.117218 и -2.132782
>>>
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Считать квадратное уравнение в целых числах -- это так необычно.
Ответ написан
Комментировать
Bringoff
@Bringoff
Android dev at Freelance
Если d = 0, то желательно выводить один корень, вам не кажется?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы