Нужно чтобы try except в цикле переносил нас из функции на ввод переменных a b c

Нужно чтобы try except в цикле переносил нас на ввод переменных, не знаю как сделать это, помогите..

import math
def fun(a, b, c):
    while True:
        if a == 0:
            print("a не может быть равно нулю")
            continue
        try:
            D = b ** 2 - 4 * a * c
        except OverflowError:
            print("Это перебор с цифрами")
            continue
        except ValueError:
            print("Это не целое или рациональное число")
            continue
        print("Дискриминант D = %.2f" % D)
        if math.isinf(D) or math.isnan(D):
            print("Габелла, бесконечность - предел(слишком большое число)")
            continue
        elif D > 0:
            x1 = (-b + math.sqrt(D)) / (2 * a)
            x2 = (-b - math.sqrt(D)) / (2 * a)
            print("x1 = %.2f \nx2 = %.2f" % (x1, x2))
        elif D == 0:
            x = -b / (2 * a)
            print("x = %.2f" % x)
        else:
            print("Корней нет")
        break

print("Введите коэффициенты для уравнения - целые или рациональные числа")
print("ax^1+bx+c=0")
a = float(input("a="))
b = float(input("b="))
c = float(input("c="))
fun(a, b, c)

Ответы (2 шт):

Автор решения: root

Так как куда переносить непонятно я написал код, далее запустите функцию где вам надо:

import math

def input():
    print("Введите коэффициенты для уравнения - целые или рациональные числа")
    print("ax^1+bx+c=0")
    a = float(input("a="))
    b = float(input("b="))
    c = float(input("c="))
    fun(a, b, c)

def fun(a, b, c):
    while True:
        if a == 0:
            print("a не может быть равно нулю")
            continue
        try:
            D = b ** 2 - 4 * a * c
        except OverflowError:
            print("Это перебор с цифрами")
            continue
        except ValueError:
            print("Это не целое или рациональное число")
            continue
        print("Дискриминант D = %.2f" % D)
        if math.isinf(D) or math.isnan(D):
            print("Габелла, бесконечность - предел(слишком большое число)")
            continue
        elif D > 0:
            x1 = (-b + math.sqrt(D)) / (2 * a)
            x2 = (-b - math.sqrt(D)) / (2 * a)
            print("x1 = %.2f \nx2 = %.2f" % (x1, x2))
        elif D == 0:
            x = -b / (2 * a)
            print("x = %.2f" % x)
        else:
            print("Корней нет")
        break
→ Ссылка
Автор решения: Gans Liber

так получилось в итоге, даже цикл не понадобился)

import math
def fun(a, b, c):

    if a == 0:
        print("a не может быть равно нулю")
        inp()
    try:
        D = b ** 2 - 4 * a * c
    except OverflowError:
        print("Это перебор с цифрами")
        inp()
    except ValueError:
        print("Это не целое или рациональное число")
        inp()
    print("Дискриминант D = %.2f" % D)
    if math.isinf(D) or math.isnan(D):
        print("Габелла, бесконечность - предел(слишком большое число)")
        inp()
    elif D > 0:
        x1 = (-b + math.sqrt(D)) / (2 * a)
        x2 = (-b - math.sqrt(D)) / (2 * a)
        print("x1 = %.2f \nx2 = %.2f" % (x1, x2))
    elif D == 0:
        x = -b / (2 * a)
        print("x = %.2f" % x)
    else:
        print("Корней нет")


def inp():
    print("Введите коэффициенты для уравнения - целые или рациональные числа")
    print("ax^1+bx+c=0")
    a = float(input("a="))
    b = float(input("b="))
    c = float(input("c="))
    fun(a, b, c)

inp()
→ Ссылка