python中的True/False直角函数

python中的True/False直角函数,python,function,geometry,Python,Function,Geometry,我似乎无法使我的功能发挥作用。当我输入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*

我似乎无法使我的功能发挥作用。当我输入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()
a=输入(“输入a”)
b=输入(“输入b”)
c=输入(“输入c”)
def isright_angled():
如果abs((a**2+b**2)-(c**2))<0.1或abs((c**2-a**2)-(b**2))<0.1或abs((c**2-b**2)-(a**2))<0.1:
返回真值
其他:
返回错误
打印为直角()

如果三角形成直角,斜边将是a、b和c中最大的一个。您可以使用它来避免重复测试3次(这是“不要重复自己”的原则)。第二件要避免的事情是
如果某事:返回True,否则:返回False
。通常最好用简单的
返回一些东西来表示。第三,函数可以接受参数,而不是依赖于全局变量:这使得事情更容易理解,并且函数相互干扰的可能性更小。我发现
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中最大的。您可以使用它来避免重复测试3次(这是“不要重复自己”的原则)。第二件要避免的事情是
如果某事:返回True,否则:返回False
。通常最好用简单的
返回一些东西来表示。第三,函数可以接受参数,而不是依赖于全局变量:这使得事情更容易理解,并且函数相互干扰的可能性更小。我发现
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)

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

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

以获得更高的精度,您可以使用
返回abs(a*a+b*b-c*c)<0.001

为什么在第一个块中求和前两个平方,在其他块中减去它们?您的算法不是对称的wrt a/b/c。请改用<代码>输入
不是你想要的…而是从斜边方程中找到每个变量。还有,当存在原始输入时,我的函数不起作用。使用
raw\u input([prompt])
类似
my\u float=float(原始输入(“输入一个float”))
@Fredrik在Python3中不是真的(尽管他仍然必须转换输入)。似乎我们正在以一种非常全面的方式检查a^2+b^2==c^2是否成立(c是抵押权)。只需检查哪一边是最大的。为什么要将第一块中的前两个正方形求和,然后在其他块中减去它们?您的算法不是对称的wrt a/b/c。请改用<代码>输入
不是你想要的…而是从斜边方程中找到每个变量。还有,当存在原始输入时,我的函数不起作用。使用
raw\u input([prompt])
类似
my\u float=float(原始输入(“输入一个float”))
@Fredrik在Python3中不是真的(尽管他仍然必须转换输入)。似乎我们正在以一种非常全面的方式检查a^2+b^2==c^2是否成立(c是抵押权)。只需检查哪一侧是最大的。不必使用“近似直角”测试,您可以使用余弦定律来实际确定斜边对面的角度。@Karl浮点运算本质上是近似的。尝试
.03*.03+.04*.04==.05*.05
:这应该是正确的,但由于不准确,它实际上是错误的。“使用trig无助于解决此类精度问题。@PaulHankin当然我知道浮点运算是如何工作的。我的论点是,返回一个角度值,并让调用代码决定它是否足够接近90度,比硬编码毕达哥拉斯检查的阈值(一个甚至没有根据输入进行缩放的值)要稳健得多,您可以使用余弦定律来实际确定斜边对面的角度。@Karl浮点运算本质上是近似的。尝试
.03*.03+.04*.04==.05*.05
:这应该是正确的,但由于不准确,它实际上是错误的。“使用trig无助于解决此类精度问题。@PaulHankin当然我知道浮点运算是如何工作的。我的论点是,返回一个角度值,并让调用代码决定它是否足够接近90度,比硬编码毕达哥拉斯检查的阈值(一个甚至没有根据输入进行缩放的值)要健壮得多。欢迎使用StackOverflow!您希望回答他人发布的问题在这里是非常受欢迎的,但在发布新答案之前,请仔细查看这些问题:这里的这个问题是在9年前提出的(您可以看到问题作者头像上方问题下方的提问时间)。更重要的是,这个问题已经有了明确的答案。通常,只有在没有现有答案或者与现有答案相比,您的答案包含了一些新的答案时,您才会发布新答案。欢迎使用StackOverflow!您希望回答他人发布的问题在这里非常受欢迎,但在发布新答案之前,请仔细查看这些问题:这里的这个问题是9年前提出的(您可以看到
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))