如何循环一个数字,以便数字遍历每个可能的值?

smi*_*est 0 python arrays loops

当我遇到问题时,我在Project Euler中做了问题9.我的计划已经取得了长期的进展.超过半小时.这是我的代码.

def Problem9():
    a = 1
    b = 1
    c = 1
    x = []
    while(a + b + c != 1000):
        a = a + 1
        for i in range(0,1000):
            c = 1000 - (a + b)
            if a < b < c:
                if (a*a) + (b*b) == (c*c):
                    x.append(a*b*c)
                    print(a*b*c)
            b = b + 1
    print(x)

Problem9()
Run Code Online (Sandbox Code Playgroud)

这基本上应该找出所有Pythagorean三元组加起来一千(链接到问题,以便你可以更好地理解它:https://projecteuler.net/problem=9)我的代码是否有问题,我可以修复或者我的代码根本错误吗?

Eri*_*ard 5

既然你知道这三个数字必须加起来1000,并且a < b < c你利用这个事实来更有效地循环(并且干净利落).

def Problem9():
    for a in range(1000):
        for b in range(a,1000):
            if a**2 + b**2 == (1000 - a - b)**2:
                return a*b*(1000 - a - b)
Run Code Online (Sandbox Code Playgroud)

在这里,你a从1到1,000 循环.因为b必须大于a,所以你从b到lo超过b.然后,既然你知道了1000 = a + b + c,那么c = 1000 - a - b,你可以测试毕达哥拉斯条件,而不需要再循环.