我似乎无法让我的功能发挥作用。当我输入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()
答案 0 :(得分:4)
如果三角形是直角的,斜边将是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)
使用这些行后,您可以在输入数字之前对代码有一定的信心。当您发现代码不起作用的情况时,您可以将它们作为附加检查添加。
答案 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