как отловить в питоне inf, -inf, nan, и запустить код на повтор, чтобы пользователь переписал переменные без переполнения
Я чайник, не понимаю совсем как это сделать. Нужно чтобы код возвращался к стадии записи переменных в случае если D == inf -inf nan, а если он не равен им, то продолжал работу по нахождению иксов. Код также отлавливает ошибки и возвращает к заполнению переменных если ввести строковое или символьное значение.
import math
while True:
print("Введите коэффициенты для уравнения - целые или рациональные числа(не бесконечно большие(или малые))")
print("ax^1+bx+c=0")
try:
a = float(input("a="))
b = float(input("b="))
c = float(input("c="))
except ValueError:
print("Это не целое или рациональное число")
continue
D = b ** 2-4 * a * c
print("Дискриминант D = %.2f" % D)
# if D == float("inf") or float("-inf") or ("nan"):
# print("Габелла, переполнение")
# continue
if 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
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
На основе вашего кода, continue должен вернуть цикл к моменту ввода переменных. А на inf и nan лучше проверять с помощью специальных функций пакета math. Причём функция isinf выдаёт True и на inf и на -inf:
if math.isinf(D) or math.isnan(D):
print("Габелла, переполнение")
continue
Как правильно подсказывают в комментарии, проверка if not math.isfinite(D): покрывает сразу все эти варианты.