【问题标题】:While loop keeps going past counter?虽然循环不断经过柜台?
【发布时间】:2020-08-26 21:42:21
【问题描述】:

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

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 个素数.

我尝试了另一种方法,但同样的事情发生了。我的猜测是计数和 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

【问题讨论】:

  • for j in range(1,1000): 无论如何都会执行 999 次。在内部循环完成之前,不会再次评估外部 while 循环的条件。如果您想在特定的 count 值处停止,则需要在每次递增时检查它。
  • 计算 所有 n 的因子,当你只关心是否有超过 2 的时候是低效的。

标签: python while-loop counter


【解决方案1】:

这是因为你的 while 循环中有一个 for 循环。所以它总是从范围(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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-12
    • 2019-08-26
    • 2011-12-03
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 2016-06-14
    相关资源
    最近更新 更多