簡體   English   中英

Python - 為什么這是一個無限循環?

[英]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

最初n2 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部分,您將增加counternumber

因此,第一次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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM