gpt4 book ai didi

python - 作为python条件的三角不等式逻辑?

转载 作者:行者123 更新时间:2023-11-28 20:27:05 24 4
gpt4 key购买 nike

[社区编辑:原来的标题是“python conditionals”,OP 正在询问下面的代码有什么问题]

我创建了一个函数,用于确定三个边在理论上是否可以形成一个三角形。在我看来它工作正常,但是当我在 pyschools.com 网站上输入代码时,它告诉我在某些测试用例中它不起作用(不幸的是它没有向我展示它不起作用的情况)。我的代码中是否缺少某些东西,所以在某些特殊情况下我的逻辑会崩溃?非常感谢您的帮助。这是函数:

import math
def isTriangle(x, y, z):
if x > 0 and y > 0 and z > 0:
if x > y and x > z:
c = x
elif y > x and y > z:
c = y
else:
c = z
if c == math.sqrt(x**2 + y**2):
return True
else:
return False
else:
return False

最佳答案

这样做更容易:

def isTriangle(sides):
smallest,medium,biggest = sorted(sides)
return smallest+medium>=biggest and all(s>0 for s in sides)

(编辑:我决定说 2,2,4 在技术上是一个三角形,但是退化的三角形;如果您不认为它是三角形,请将 >= 更改为 >。)

这正是您正在做的。你正在计算 c = largest = max(x,y,z)正确,然后做 return math.sqrt(x**2+y**2)它检查它是否是直角三角形。

演示:

>>> isTriangle([2,2,6])
False
>>> isTriangle((5,5,9))
True
>>> isTriangle([-1,2,2])
False

下面我提到如何简化您的代码:

import math               # from math import * for such common functions
def isTriangle(x, y, z): # better to pass in a tuple or object, but this works
if x>0 and y>0 and z>0: # (then you could do all(s>0 for s in sides))
# (you could also do isTriangle(*sides))
# (you might need to add checks len(sides)==3
# if your input data might include e.g. squares)
if x > y and x > z: # \
c = x # |
elif y > x and y > z: # > This is the same as c = max(x,y,z)
c = y # |
else: # |
c = z # /
if c == math.sqrt(x**2 + y**2): # \
return True # | Same as return c==sqrt(x**2+y**2)
else: # |
return False # /
else:
return False

“if bool return True else return False”在几乎任何现代编程语言中都与“return bool”相同。前者不必要地冗长,不应该使用。

关于python - 作为python条件的三角不等式逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9966173/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com