Содержит ли этот код какие-либо ошибки?

Как можно улучшить код, связанный с обработкой ошибок и определением вырожденности треугольника на плоскости, используя собственный класс исключений?
  • 1 апреля 2024 г. 18:10
Ответы на вопрос 2
Данный код не содержит ошибок, но его можно улучшить, добавив собственный класс исключений для обработки ошибок связанных с вырожденностью треугольника на плоскости.

Пример улучшенного кода с использованием собственного класса исключений:

```python
class TriangularError(Exception):
    pass

def is_triangle(a, b, c):
    if a + b <= c or a + c <= b or b + c <= a:
        raise TriangularError("Треугольник не может существовать с заданными сторонами")
    return True

try:
    a = float(input("Введите длину стороны a: "))
    b = float(input("Введите длину стороны b: "))
    c = float(input("Введите длину стороны c: "))
    
    if is_triangle(a, b, c):
        print("Треугольник существует")
except TriangularError as e:
    print(f"Ошибка: {e}")
except ValueError:
    print("Ошибка: Введите число, а не строку")
```

В данном улучшенном коде, если треугольник не может существовать с заданными сторонами, вызывается исключение TriangularError. При этом, в блоке try-except отлавливаются два типа ошибок: если пользователь вводит не число, а строку, то будет вызвано исключение ValueError.
(x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2)) == 0

Пока переменные - целые числа. Данное выражение может сработать на истину.
Но если захотите вещественные числа применять, то придется ввести константу или переменную для сглаживания погрешности работы с числами с плавающей запятой.
abs(x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2)) <= eps

eps - это макс. значение ошибки, при работе с числами с плавающей запятой. Очень сильно будет зависеть, в каких масштабах будут остальные переменные. Если единицы - то eps будет 0,001, если другие переменные сотни и тысячи, то эпсилон будет 0,1 (для примера привел числа, чтобы понимать масштаб).
Похожие вопросы