Python中的真/假直角函数

问题描述 投票:0回答:2

我似乎无法使我的功能正常工作。当我输入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()
python function geometry
2个回答
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)

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

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.