True / False функция прямого угла в питоне - PullRequest
0 голосов
/ 17 декабря 2011

Я не могу заставить свою функцию работать.Когда я набираю 3 для a, 2 для b и 3.61 для c.Это работает.Тем не менее, когда я пытаюсь эти значения в другом порядке (например: 3.61 для a, 3 для b и 2 для c), возвращается как ложное.Я не могу понять, в чем проблема.Заранее спасибо!

a = input("Enter a ")
b = input("Enter b ")
c = input("Enter c ")


def isright_angled():
    if abs((a**2+b**2)-(c**2)) < 0.1 or abs((c**2-a**2)-(b**2)) < 0.1 or abs((c**2-b**2)-(a**2)) < 0.1:                         
        return True
    else:
        return False

print isright_angled()

1 Ответ

5 голосов
/ 17 декабря 2011

Гипотенуза, если треугольник прямоугольный, будет наибольшим из a, b и c. Вы можете использовать это, чтобы избежать дублирования теста 3 раза (это принцип «не повторяйте себя»). Второе, чего следует избегать, это if something: return True else: return False. Обычно это лучше выражать просто return something. В-третьих, функции могут принимать аргументы, а не полагаться на глобальные переменные: это облегчает понимание, и тогда меньше вероятность того, что функции будут мешать друг другу. a * a мне легче понять, чем a ** 2, но это личный вкус. Собираем все это вместе:

def is_approximately_right_angled(a, b, c):
    a, b, c = sorted([a, b, c])
    return abs(a * a + b * b - c * c) < 0.1

a = input('enter a ')
b = input('enter b ')
c = input('enter c ')
print is_approximately_right_angled(a, b, c)

Если это не работает, вы можете ускорить разработку, добавив несколько проверок. Если вы писали большую программу, вы можете писать модульные тесты, но здесь только некоторые утверждения в модуле избавят вас от необходимости каждый раз вводить a, b, c для тестирования.

Я бы добавил что-то вроде этого (перед строкой a = input...):

assert is_approximately_right_angled(3, 4, 5)
assert is_approximately_right_angled(3, 5, 4)
assert is_approximately_right_angled(3, 2, 3.61)
assert not is_approximately_right_angled(3, 5, 5)

Имея эти строки, вы можете иметь некоторую уверенность в коде, прежде чем начнете вводить числа. Если вы обнаружите случаи, когда код не работает, вы можете добавить их в качестве дополнительных проверок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...