python中的真/假直角函数

时间:2011-12-17 17:14:54

标签: python function geometry

我似乎无法让我的功能发挥作用。当我输入3表示a,2表示b表示,3.61表示c表示。这样可行。但是,当我以不同的顺序尝试这些值时(Ex:3.61表示a,3表示b,2表示c)它返回false。我无法弄清楚问题是什么。提前谢谢!

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()

3 个答案:

答案 0 :(得分:4)

如果三角形是直角的,斜边将是a,b和c中最大的斜边。您可以使用它来避免重复测试3次(这是“不要重复自己”的原则)。要避免的第二件事是if something: return True else: return False。它通常更好地表达为return something。第三,函数可以采用参数而不是依赖于全局变量:这使事情更容易理解,因此函数相互干扰的可能性更小。我发现a * aa ** 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)

使用这些行后,您可以在输入数字之前对代码有一定的信心。当您发现代码不起作用的情况时,您可以将它们作为附加检查添加。

答案 1 :(得分:0)

a = int(input("Enter the side length" ))
b = int(input("Enter the side length" ))
c = int(input("Enter the side length" ))

def is_right_triangle(a,b,c):
    '''
    is_right_triangle(a,b,c) -> bool
    returns True if a,b,c is a right triangle with hypotenuse c
    '''
    a, b, c = sorted([a, b, c])
    return a*a + b*b == c*c

print(is_right_triangle(a,b,c))

答案 2 :(得分:-1)

为了获得更高的准确性,您可以使用 返回abs(a * a + b * b-c * c)<0.001