[英]Why does this code not go to an infinite loop? (Python)
我目前正在專門學習while和for循環的Python。
我期望下面的代碼進入無限循環,但事實並非如此。 誰能解釋?
N = int(input("Enter N: "))
number = 1
count = 0
while count < N:
x = 0
for i in range(1, number+1):
if number % i == 0:
x = x + 1
if x == 2:
print(i)
count = count + 1
number = number + 1
為了使該代碼不會無限循環, count
必須>= N
為了增加計數, x
必須等於2
。
為了使x
等於2
,內部for循環需要運行兩次:
for i in range(1, number+1): if number % i == 0: x = x + 1
for
循環運行兩次, number
除1
和數字本身外不得具有其他因素。 這只剩下質數。 當number
是質數時,內部循環將始終將x == 2
設置為。 由於存在無限數量的質數,最終將滿足count >= N
。 嘗試將N更改為number :
while count < N:
while count < number:
好吧,讓我們剖析您的代碼。
N = int(input("Enter N: "))
number = 1
count = 0
為了簡潔起見,在這里您要接受用戶輸入並將N設置為某個數字。假設4。它被強制轉換為int,因此現在是整數。 您還可以將計數初始化為0以進行循環,並將數字變量保持為1。
while count < N:
x = 0
for i in range(1, number+1):
if number % i == 0:
x = x + 1
if x == 2:
print(i)
count = count + 1
number = number + 1
在這里,您說計數小於N時,請繼續執行縮進的代碼塊。 因此,在我們的N個輸入情況(4)中,我們一直循環直到count等於4,這打破了while循環的邏輯。 您的第一次迭代中有一個x = 0
這意味着每次您從頂部重新開始時x都會變為0。接下來,您將輸入一個for循環,該循環從1到但不包括數字(1)+ 1等於2。然后檢查如果該數字可被for循環中的i相等,並且只要發生這種情況就將x加1。 迭代發生后,您然后檢查x是否為2,這是正確的,因此在for循環之后輸入if塊。 每次擊中該秒(如果阻塞)時,您都會通過添加一個來計數。 現在請記住,只要if x == 2
且每次迭代都將滿足它,它就會一直更新,因此最終您的while循環將因此中斷。 因此,為什么它不會永遠持續下去。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.