[英]Python - why is this an 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)
我似乎無法弄清楚為什么這是一個無限循環。
下面是我修改后的代碼,但我仍然不明白為什么原始代碼會創建一個無限循環:
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)
由於range(2, 2)
為空range(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
。 for
循環因此for i in range(2,2)
是一個空范圍,因此循環永遠不會執行。 這意味着您永遠不會進入可能增加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)
您for i in range(2,n):
和起點n=2
編寫了它。 所以你的范圍將是range(2,2)
所以它會返回空列表所以這個 for 循環永遠不會執行並且你的程序將進入無限循環。
在您使用的第二個代碼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
部分,您將增加counter
和number
。
因此,第一次number = 2
並且 for 循環變為for x in range(2, number):
意味着不會執行 for 循環,因此,根據我上面討論的,如果 for 循環不是單次執行, else
將執行部分
因此,在else
部分編號將增加 1,然后在下一次迭代中,您的 for 循環變為for x in range(2,3)
因此,屆時 for 循環將成功執行...
對於for...else
參考
for i in range(2,n):
這意味着范圍是 (2,2) 循環從未開始,因為它的開始和結束與 2-2 相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.