Код выдаёт неправильный ответ. Задача: Определите тип треугольника (остроугольный, тупоугольный, прямоугольный) с данными сторонами
Формат входных данных
Даны три натуральных числа – стороны треугольника. Каждое число вводится с новой строки.
Формат выходных данных:
*Необходимо вывести одно из слов:
right для прямоугольного треугольника,
acute для остроугольного треугольника,
obtuse для тупоугольного треугольника,
impossible, если треугольника с такими сторонами не существует.*
Я запускаю вот такой код:
x=int(input())
y=int(input())
z=int(input())
c = max(x,y,z)
if c==x:
a, b = y, z
elif c==y:
a,b=x,z
else:
a, b = x, y
if c>=a+b:
print('impossible')
else:
if c^2==(a^2+b^2):
print('right')
elif c^2<(a^2+b^2):
print('acute')
else:
print('obtuse')
Для входных чисел 8 10 6
Выдаётся результат: "obtuse", хотя правильно "right". Скажите, пожалуйста, что я делаю неправильно?
Ответы (2 шт):
Проблема в вашем текущем коде связана с использованием оператора побитового исключающего ИЛИ ^ вместо оператора возведения в квадрат **
Вот исправленный вариант вашего кода, где я заменил ^ на ** для возведения чисел в квадрат:
x = int(input())
y = int(input())
z = int(input())
c = max(x, y, z)
if c == x:
a, b = y, z
elif c == y:
a, b = x, z
else:
a, b = x, y
if c >= a + b:
print('impossible')
else:
if c ** 2 == (a ** 2 + b ** 2):
print('right')
elif c ** 2 < (a ** 2 + b ** 2):
print('acute')
else:
print('obtuse')
Оператор ^ в Питоне - это XOR. Для возведения в степень используется оператор **. Ниже ваша программа с минимальными исправлениями:
x = int(input())
y = int(input())
z = int(input())
c = max(x, y, z)
if c == x:
a, b = y, z
elif c == y:
a, b = x, z
else:
a, b = x, y
if c >= a + b:
print('impossible')
else:
if c ** 2 == a ** 2 + b ** 2:
print('right')
elif c ** 2 < a ** 2 + b ** 2:
print('acute')
else:
print('obtuse')
Её можно переписать проще:
a, b, c = sorted(int(input()) for _ in range(3))
if c >= a + b:
print('impossible')
else:
residual = c ** 2 - a ** 2 - b ** 2
if residual == 0:
print('right')
elif residual < 0:
print('acute')
else:
print('obtuse')
И ещё есть хулиганский способ без сортировки:
sides = [int(input()) for _ in range(3)]
c = max(sides)
if 2 * c >= sum(sides):
print('impossible')
else:
residual = 2 * c ** 2 - sum(v ** 2 for v in sides)
if residual == 0:
print('right')
elif residual < 0:
print('acute')
else:
print('obtuse')