@beks_13

Нужно оптимизировать и улучшить следующий код, найти корни квадратного уравнения, при любых числах?

def discrim(a, b, c):
    x1, x2 = None, None
    if a == 0:
        if b == 0:
            if c == 0:
                # a = 0, b = 0, c = 0
                x1 = 'All numbers'
                return x1, x2
            else:
                # a = 0, b = 0, c <> 0
                x1 = 'incurrect input'
                return x1, x2
        else:
            if c == 0:
                # a = 0, b <> 0, c = 0
                x1 = 0
                return x1, x2
            else:
                # a = 0, b <> 0, c <> 0
                x1 = (-c) / b
                return x1, x2
    else:
        if b == 0:
            if c == 0:
                # a <> 0, b = 0, c = 0
                x1 = 0
                return x1, x2
            else:
                # a <> 0, b = 0, c <> 0
                x1 = ((-c) / a) ** 0.5
                x2 = -(((-c) / a) ** 0.5)
                return x1, x2
        else:
            if c == 0:
                # a <> 0, b <> 0, c = 0
                x1 = 0
                x2 = ((-b) / a) ** 0.5
                return x1, x2
    d = (b ** 2) - (4 * a * c)
    x1 = ((-b) + (d ** 0.5)) / (2 * a)
    x2 = ((-b) - (d ** 0.5)) / (2 * a)
    return x1, x2

a, b, c = float(input()), float(input()), float(input())
#a, b, c = 1, 2, 0
x1, x2 = discrim(a, b, c)
if type(x1) == type(complex()) or type(x2) == type(complex()):
    print("complex number")
else:
    print(x1, x2, sep=' ||| ')


Комментарии приветствуются
  • Вопрос задан
  • 107 просмотров
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Для Python 3.10 и выше
def squareEquation(a, b, c):
  match a, b, c:
    case 0, 0, 0:
      return 'All numbers', None
    case 0, 0, _:
      return 'Empty set', None
    case 0, _, _:
      return -c / b, None
  d = b * b - 4 * a * c
  r = -b / 2 / a
  i = (abs(d) ** 0.5) / 2 / a
  if (d < 0):
    return f'{r} - {i}i', f'{r} + {i}i'
  if (d == 0):
    return r, None
  return r - i, r + i
Ответ написан
@chemdev
Решай задачу в общем случае: сразу считай дискриминант.
Только перед этим в начале функции если а равен нулю, просто подними ошибку, что это не квадратное уравнение (у тебя ж задача искать корни квадратного, верно?), а то можешь словить ZeroDivisionError.
Условное ветвление пригодится только при сравнении дискриминанта с нулем.
В таком случае не придется делать проверку на комплексное.
Оптимизируй код до того момента, пока вычисление дискриминанта не будет выполняться в коде один единственный раз.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы