Нахождение треугольника прямоугольного или нет - PullRequest
0 голосов
/ 16 мая 2019

Эта функция, основанная на Python 3, возвращает значение, если треугольник имеет или не является прямоугольным при заданных длинах сторон x, y и z.У меня проблема с упрощением условного выражения.Должна ли эта функция проверять острый, правый, тупой, разносторонний, равнобедренный и равносторонний углы или есть условия, которые я могу пропустить?Любые отзывы приветствуются.

def right_angled(x, y, z):
    """This function returns if a triangle is or isn't
    right-angled given side lengths x, y, and z."""
    p = x + y + z #triangle perimeter
    a_sym = p / 180 #triangle perimeter divided by 180 
    one = x * a_sym #angle one
    two = y * a_sym #angle two
    three = z * a_sym #angle three
    if one and two or one and three or two and three == 90:
        return "The triangle is right-angled."
    elif one and two and three == 180:
        return "The triangle is right-angled." #next conditional(s)?
    else:
        return "The triangle is not right-angled."

print(right_angled(4, 5, 6))

Ответы [ 2 ]

1 голос
/ 16 мая 2019

Ваша функция полностью неверна.

Вы не можете найти угол как отношение стороны и периметра.

Выражение if one and two не вычисляет сумму - and здесь логический (логический) оператор.

Чтобы определить, является ли прямоугольник правильным, вы можете использовать Теорема Пифагора

def right_angled(a, b, c):
    if (a*a+b*b==c*c) or (c*c+b*b==a*a) or (a*a+c*c==b*b) :
        return "The triangle is right-angled." 
    else:
        return "The triangle is not right-angled."

Или просто вернуть логический результат

return (a*a+b*b==c*c) or (c*c+b*b==a*a) or (a*a+c*c==b*b)
0 голосов
/ 17 мая 2019

Я предлагаю использовать теорему Пифагора для достижения этого (a^2+b^2=c^2), протестировав 3 комбинации длин сторон. Чтобы компенсировать неточность с плавающей запятой, сравните в диапазоне:

def right_angled(a, b, c, e):
    return abs(a*a+b*b-c*c)<e or abs(b*b+c*c-a*a)<e or abs(c*c+a*a-b*b)<e

Однако диапазон зависит от масштаба длин сторон, то есть маленькие треугольники проходят испытание легче, чем большие треугольники. Например, любой треугольник с длиной стороны ~0.01 пройдет тест, если e=0.01. По этой причине безопаснее (но дороже) нормализовать длину сторон по формуле (a^2+b^2)/c^2=1

def right_angled(a, b, c, e):
    return c>0 and abs(1-(a*a+b*b)/(c*c))<e or \
           a>0 and abs(1-(b*b+c*c)/(a*a))<e or \
           b>0 and abs(1-(c*c+a*a)/(b*b))<e
...