Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 16, 2017 23:20:05

PavelShturm
Зарегистрирован: 2017-11-16
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

задачка на решение квадратного уравнения

Подскажите ,пожалуйста, как можно упростить мой код:

 from math import sqrt
def get_roots(a, b, c):
    # a=0 makes the function linear, not quadratic.
    if a == 0:
        return None, None
    else:
        discriminant = b ** 2 - 4 * a * c
        # The square root is extracted only from a nonnegative number.
        if discriminant < 0:
            return None, None
        # If discriminant is 0, then roots of the quadratic equation 1.
        elif discriminant == 0:
            root1 = (-b - sqrt(discriminant)) / (2 * a)
            return root1, None
        # If discriminant > 0, then roots of the quadratic equation 2.
        else:
            root1 = (-b - sqrt(discriminant)) / (2 * a)
            root2 = (-b + sqrt(discriminant)) / (2 * a)
            return root1, root2

Код работает верно ,но нужно обойтись без вложенных if-ов и без использования root1 два раза.

Пробую сделать двумя функциями, но возникает ошибка:

 TypeError: 'NoneType' object is not iterable

 def get_roots(a, b, c):
    discriminant = b ** 2 - 4 * a * c
    if discriminant < 0:
        return None, None
    else:
        roots(a, b, discriminant)
def roots(a, b, d):
    root1 = (-b - sqrt(d)) / (2 * a)
    root2 = (-b + sqrt(d)) / (2 * a)
    if d == 0:
        return root1, None
    else:
        return root1, root2

Офлайн

#2 Ноя. 17, 2017 02:18:03

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

задачка на решение квадратного уравнения

В идеале, нужно возвращать тип переданного уравнения и список полученных корней. Как ты возвращаешь None на линейное уравнение? Как ты возвращаешь None на отрицательный дискриминант?

(0, [2, 4])           - квадратное, два корня
(0, [2]) - дискриминант равен нулю, один корень
(1, [2]) - линейное, один корень
(2, [(1, 2), (3, 4)]) - дискриминант меньше нуля, два комплексных корня
(3, []) - коэффициенты равны нулю, всё множество действительных чисел
(4, []) - нет решения

Так что разберись сначала алгоритмически, как должно решаться и что должно возвращаться.



Отредактировано py.user.next (Ноя. 17, 2017 02:25:27)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version