【发布时间】:2021-02-02 20:30:30
【问题描述】:
我正在编写一个计算素数的函数。我尝试使用嵌套在 while 循环中的 for-break-else 框架。但是,我得到了一个无限循环。我知道else 没有正确的缩进。在我将else 向前移动并使其与for, 平行后,问题就解决了。但是,我很难理解为什么else 块的原始位置会给我无限循环。有人可以帮我吗?谢谢。
def count_primes(num):
primes = [2]
x = 3
if num < 2:
return 0
else:
while x <= num:
for y in range(3,x,2):
if x%y ==0:
x += 2
break #jump out the for loop
else:
primes.append(x)
x +=2
return primes
【问题讨论】:
-
x以3开头,循环为for y in range(3,x,2):。循环永远不会执行,所以x永远不会改变。 -
永远不会执行for循环块
-
这是因为
range(3,x,2)给出了一个空的可迭代对象,所以for块永远不会被执行,x+=2,break永远不会被调用。那么,while x<= num总是 True 会导致无限循环吗?
标签: python loops for-loop while-loop break