如何继续外侧的 for 循环?
How can I continue the for loop of the outer side?
def countPrimes(self, n):
if n <= 1:
return 0
if n == 2:
return 1
count = 0
counted = [2, ]
for num in xrange(3, n+1, 2):
for c in counted:
if num % c == 0:
continue
count += 1
counted.append(num)
return count
我正在编写解决素数计数问题的代码。我将计数用作存储已检查素数的数组,并将它们用于下一个素数的检查。我尝试使用 continue 退出内部 for 循环,然后一旦发现 num 不是有效素数, count += 1 and counted.append(num)
将不会执行。但是,我在这里遇到了实施问题,因为 continue
语句会将我带到另一个 c
而不是另一个 num
.
尝试使用 break
而不是 continue
。参见documentation here。基本上 break
带你离开最小的封闭循环,让你回到更高级别的循环中进行下一次迭代。另一方面,continue
只是让您跳转到最小闭合循环的下一次迭代,所以您不会先进入更高级别的循环。
如果我对你的问题理解正确,你想知道如何打破内部 c
循环,避免其他代码,并继续另一个 num
。与其他答案一样,您想将 break
与一些智能布尔值一起使用。循环可能如下所示:
for num in xrange(3, n+1, 2):
next_num = False
for c in counted:
if num % c == 0:
next_num = True
break
if next_num:
continue
count += 1
counted.append(num)
这样,如果遇到能被c整除的num,就跳出内部c
循环,避免将num加入到计数列表中。
边走边累加计数和素数列表没有多大意义。在某处引入不匹配的机会。我对代码做了一些修改,使用了一些更具描述性的变量名称。令人惊奇的是,清晰的名称真的可以使算法更有意义。 (至少对我来说是这样)
def primesUpTo(n):
primes = []
if n > 1:
primes.append(2)
for candidate in xrange(3, n+1, 2):
for prime in primes:
candidate_is_prime = candidate % prime
if not candidate_is_prime: # We're done with this inner loop
break
if candidate_is_prime:
primes.append(candidate)
return primes
print len(primesUpTo(100))
def countPrimes(self, n):
if n <= 1:
return 0
if n == 2:
return 1
count = 0
counted = [2, ]
for num in xrange(3, n+1, 2):
for c in counted:
if num % c == 0:
continue
count += 1
counted.append(num)
return count
我正在编写解决素数计数问题的代码。我将计数用作存储已检查素数的数组,并将它们用于下一个素数的检查。我尝试使用 continue 退出内部 for 循环,然后一旦发现 num 不是有效素数, count += 1 and counted.append(num)
将不会执行。但是,我在这里遇到了实施问题,因为 continue
语句会将我带到另一个 c
而不是另一个 num
.
尝试使用 break
而不是 continue
。参见documentation here。基本上 break
带你离开最小的封闭循环,让你回到更高级别的循环中进行下一次迭代。另一方面,continue
只是让您跳转到最小闭合循环的下一次迭代,所以您不会先进入更高级别的循环。
如果我对你的问题理解正确,你想知道如何打破内部 c
循环,避免其他代码,并继续另一个 num
。与其他答案一样,您想将 break
与一些智能布尔值一起使用。循环可能如下所示:
for num in xrange(3, n+1, 2):
next_num = False
for c in counted:
if num % c == 0:
next_num = True
break
if next_num:
continue
count += 1
counted.append(num)
这样,如果遇到能被c整除的num,就跳出内部c
循环,避免将num加入到计数列表中。
边走边累加计数和素数列表没有多大意义。在某处引入不匹配的机会。我对代码做了一些修改,使用了一些更具描述性的变量名称。令人惊奇的是,清晰的名称真的可以使算法更有意义。 (至少对我来说是这样)
def primesUpTo(n):
primes = []
if n > 1:
primes.append(2)
for candidate in xrange(3, n+1, 2):
for prime in primes:
candidate_is_prime = candidate % prime
if not candidate_is_prime: # We're done with this inner loop
break
if candidate_is_prime:
primes.append(candidate)
return primes
print len(primesUpTo(100))