def pythagorean(n):
aAndB = []
for a in range(150, n-1):
for b in range(150, n):
for c in range(150,n+1):
if (c * c) == a *a + b*b and a + b + c == 1000:
aAndB.append(a)
return aAndB
print(pythagorean(500))
因此,我进行了此功能,以查找满足标准a + b + c = 1000的勾股三胞胎。当我运行它时,我得到[200,375]。问题是当我特别要求为a附加项目时,为什么在列表aAndB中会收到两个数字?
如果我使用aAndB.append(c)进行尝试,结果将显示[425,425]。如何解决它,只显示列表中的一个元素?
谢谢您的帮助!
答案 0 :(得分:0)
这是因为有两个值可以满足您的条件:
if (c * c) == a *a + b*b and a + b + c == 1000:
您可以调试代码或仅在数组中添加更多信息,如下所示:
def pythagorean(n):
aAndB = []
for a in range(150, n-1):
for b in range(150, n):
for c in range(150,n+1):
if (c * c) == a * a + b * b and a + b + c == 1000:
aAndB.append({'a': a, 'b': b, 'c': c})
return aAndB
result = pythagorean(500)
for v in result:
print(v)
因此,如果您只需要一个元素-从“结果”数组中选择哪个元素。 例如,如果您只想要第一:
first_element = None
if len(result) > 0:
first_element = result[0]
print('First element:', first_element)
答案 1 :(得分:-2)
您可以使用euclid的毕达哥拉斯三胞胎证明。您可以选择任意任意大于零的数字,例如m,n
。根据欧几里德,三元组将是a(m∗m−n∗n),b(2∗m∗n),c(m∗m+n∗n)
。现在应用此公式找出三元组,说我们的三元组的值是6,然后是另外两个。
a(m∗m−n∗n),b(2∗m∗n),c(m∗m+n∗n)
确定b(2∗m∗n)
显然是偶数。所以现在
(2∗m∗n)=6 =>(m∗n)=3 =>m∗n=3∗1 =>m=3,n=1
除了3和1之外,您还可以采用其他任何值,但是这两个值应包含两个数字的乘积为3 (m∗n=3)
。
现在,当m
等于3并且n
等于1时,
a(m∗m−n∗n)=(3∗3−1∗1)=8 , c(m∗m−n∗n)=(3∗3+1∗1)=10
6,8,10是我们的价值三元组,这是我们如何生成三元组的可视化。
如果给定数字像(9)一样是奇数,则在此稍作修改,因为b(2∗m∗n)
永远不会是奇数。所以,这里我们必须采取
a(m∗m−n∗n)=7 , (m+n)∗(m−n)=7∗1 , So,(m+n)=7,(m−n)=1
现在从这里找到m
和n
,然后找到另外两个值。
按照此代码进行编码,它将高效地生成不同的三元组