0
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]。如何修复它以仅显示列表中的一个元素?

谢谢您的帮助!

4

2 回答 2

0

那是因为有 2 个值满足您的条件:

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)
于 2019-03-13T10:49:36.380 回答
-2

您可以使用 euclid 的毕达哥拉斯三胞胎证明。你可以选择任何大于零的任意数字说m,n。根据 euclid,三元组将是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

现在找到mn从这里找到其他两个值。

根据这个做代码,它将生成不同的三元组并且有效地

于 2019-08-02T15:00:24.873 回答