Python中的真/假直角函数

use*_*975 0 python geometry function

我似乎无法正常工作。当我输入3代表a,2代表b和3.61代表c。这样可行。但是,当我以其他顺序尝试这些值时(例如:a为3.61,b为3,c为2),它将返回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()
Run Code Online (Sandbox Code Playgroud)

小智 5

如果三角形是直角的,则斜边将是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)
Run Code Online (Sandbox Code Playgroud)

如果它不起作用,则可以通过添加一些检查来加快开发速度。如果您正在编写一个大型程序,则可以编写单元测试,但是这里模块中只有一些断言可以避免您每次都要输入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)
Run Code Online (Sandbox Code Playgroud)

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