while 循环不断经过柜台?

While loop keeps going past counter?

我只是想写一个简单的循环来给我一个素数列表。我不明白为什么当计数达到设定值时循环不停止。

def factors(n):
    f = []
    for i in range(1,n+1):
        if n%i == 0:
            f.append(i)
    return(f)
    
primes = []
    count = 0
    while count < 10:
        for j in range(1,1000):
            k = factors(j)
            if len(k) <= 2:
                primes.append(j)
                count += 1
    print(count)

计数达到 169,事实上,生成的列表中有 169 个质数,但我希望它停止在某个数字,这样我就不必四处寻找,比如说,第 501 个素数。

我尝试了另一种方法,但还是发生了同样的事情。我的猜测是 count 和 for j in range(1,1000) 相互干扰。

primes = []
count = 0
while True:
    if count < 10:
        for j in range(1,1000):
            k = factors(j)
            if len(k) <= 2:
                primes.append(j)
                count += 1
    else:
        break

这是因为你的while循环里面有一个for循环。所以它总是 运行 来自 range(1,1000).

如果您希望它在达到计数时退出,您需要删除 while 并在计数时中断

primes = []
count = 0
for j in range(1,1000):
    k = factors(j)
    if len(k) <= 2:
        primes.append(j)
        count += 1
    if count >= 10:
        break
print(count)

或移除 for

primes = []
count = 0
j = 0
while count < 10:
    k = factors(j)
    if len(k) <= 2:
        primes.append(j)
        count += 1
    j += 1
print(count)