Python—为什么这是一个无限循环?
我有以下代码:Python—为什么这是一个无限循环?,python,infinite-loop,Python,Infinite Loop,我有以下代码: sum_of_primes = 0 n = 2 while n < 10: for i in range(2,n): if n%i == 0: n += 1 break else: sum_of_primes += i n += 1 print(sum_of_primes) 素数之和=0 n=2 当n
sum_of_primes = 0
n = 2
while n < 10:
for i in range(2,n):
if n%i == 0:
n += 1
break
else:
sum_of_primes += i
n += 1
print(sum_of_primes)
素数之和=0
n=2
当n<10时:
对于范围(2,n)内的i:
如果n%i==0:
n+=1
打破
其他:
素数之和+=i
n+=1
打印(素数之和)
我似乎不明白为什么这是一个无限循环
下面是我修改过的代码,它可以工作,但我仍然不明白为什么原始代码会创建一个无限循环:
counter = 0
primes = 0
number = 2
while counter < 10:
for x in range(2, number):
if number % x == 0:
number += 1
counter+=1
break
else:
primes +=number
counter = number
number += 1
print(primes)
计数器=0
素数=0
数字=2
当计数器<10时:
对于范围内的x(2,编号):
如果编号%x==0:
数字+=1
计数器+=1
打破
其他:
素数+=数
计数器=数字
数字+=1
打印(素数)
由于范围(2,2)
为空,因此不会执行内部循环。由于内部循环更新n
,n
永远不会更改,因此外部循环永远不会终止
n = 2
while n < 10:
for i in range(2,n): # list(range(2,2)) == [] ...
# ... so this loop never executes
# and n is never updated
# so this loop runs forever
n=2
当n<10时:
对于范围(2,n)中的i:#列表(范围(2,2))=[]。。。
# ... 所以这个循环永远不会执行
#n永远不会更新
#所以这个循环永远运行
由于范围(2,2)
为空,因此不会执行内部循环。由于内部循环更新n
,n
永远不会更改,因此外部循环永远不会终止
n = 2
while n < 10:
for i in range(2,n): # list(range(2,2)) == [] ...
# ... so this loop never executes
# and n is never updated
# so this loop runs forever
n=2
当n<10时:
对于范围(2,n)中的i:#列表(范围(2,2))=[]。。。
# ... 所以这个循环永远不会执行
#n永远不会更新
#所以这个循环永远运行
最初n
是2
。因此,的循环是范围(2,2)
中的i的,该范围为空,因此循环永远不会执行。这意味着您永远不会进入可能增加n
的代码
sum_of_primes = 0
n = 2
while n < 10: # n == 2
for i in range(2,n): # loop repeats zero times
if n%i == 0:
n += 1
break
else:
sum_of_primes += i
n += 1
# n == 2 still the case down here.
print(sum_of_primes)
素数之和=0
n=2
当n<10时:#n==2
对于范围(2,n)内的i:#循环重复零次
如果n%i==0:
n+=1
打破
其他:
素数之和+=i
n+=1
#n==2下面的情况仍然如此。
打印(素数之和)
最初n
是2
。因此,
的循环是范围(2,2)
中的i的,该范围为空,因此循环永远不会执行。这意味着您永远不会进入可能增加n
的代码
sum_of_primes = 0
n = 2
while n < 10: # n == 2
for i in range(2,n): # loop repeats zero times
if n%i == 0:
n += 1
break
else:
sum_of_primes += i
n += 1
# n == 2 still the case down here.
print(sum_of_primes)
素数之和=0
n=2
当n<10时:#n==2
对于范围(2,n)内的i:#循环重复零次
如果n%i==0:
n+=1
打破
其他:
素数之和+=i
n+=1
#n==2下面的情况仍然如此。
打印(素数之和)
您为范围(2,n)内的i编写了:
并且在起始点n=2
。因此,您的范围将是range(2,2)
,因此它将返回空列表,这样这个for循环将永远不会执行,并且您的程序将进入无限循环
在第二个代码中,您正在为…else使用
for x in range(2, number):
if number % x == 0:
number += 1
counter+=1
break
else:
primes +=number
counter = number
number += 1
这里,for…else
的含义是,如果一次都不执行for循环,则执行for循环的else
部分。在else
部分,增加计数器
和编号
因此,第一次number=2
并且对于范围(2,number)内的x,for循环变为:
循环的平均值将不会执行,因此,如上文所述,如果for循环不超过一次,否则将执行部分
因此,在中,否则
零件号将增加1,然后在下一次迭代中,对于范围(2,3)内的x,for循环将变为,
因此,此时for循环将成功执行
对于For…else
您为范围(2,n)内的i编写了,
并且在起始点n=2
。因此,您的范围将是range(2,2)
,因此它将返回空列表,这样这个for循环将永远不会执行,并且您的程序将进入无限循环
在第二个代码中,您正在为…else使用
for x in range(2, number):
if number % x == 0:
number += 1
counter+=1
break
else:
primes +=number
counter = number
number += 1
这里,for…else
的含义是,如果一次都不执行for循环,则执行for循环的else
部分。在else
部分,增加计数器
和编号
因此,第一次number=2
并且对于范围(2,number)内的x,for循环变为:
循环的平均值将不会执行,因此,如上文所述,如果for循环不超过一次,否则将执行部分
因此,在中,否则
零件号将增加1,然后在下一次迭代中,对于范围(2,3)内的x,for循环将变为,
因此,此时for循环将成功执行
对于For…else
这意味着范围是(2,2)。循环从未开始,因为它的开始和结束与2-2相同
这意味着范围是(2,2)。循环从未开始,因为它的开始和结束与2-2相同。谢谢。我现在明白了,但我仍然感到困惑,因为第二个代码在我应该有相同的空范围问题的地方工作。谢谢。我现在明白了,但我仍然感到困惑的是,第二个代码在我应该有相同的空范围问题的地方工作。这是有道理的。谢谢,但是第二个代码在我应该有相同的空范围问题的地方工作。这是有意义的。谢谢,但是第二个代码在我应该有相同的空范围问题的地方起作用。@abramo我为您的查询更新了我的答案,请检查,如果您不理解请告诉我。是的,很好,愉快的编码:)@abramo我为您的查询更新了我的答案,请检查,如果您不理解请告诉我。是的,很好,快乐编码:)