2016-01-20 50 views
-1

簡單的素數函數。當x < 2時,循環不運行。我不太明白爲什麼。有人可以解釋嗎?我明白我的起跑距離是2,但那只是i;爲什麼會影響x爲什麼這個範圍循環的Python不工作?

謝謝。

def is_prime (x): 
    for i in range(2, x-1, 1): 
     if (x % i == 0): 
      return False 
    return True 

謝謝大家。天哪,我無法相信我是如何忽略最大範圍呼叫的。

+2

注意:您不需要額外的參數'1';該步驟默認爲該值。 – AMACB

+0

因爲你的範圍是2..x-1,所以當x <2時,你的範圍是空的。 – AChampion

回答

1

range(lower_bound, upper_bound, step)產生一系列數字,從lower_bound開始並增加step,直到達到upper_bound。在你的情況下,當x = 1時,range(2,x-1,1)會產生一個空序列,因爲你的下界大於你的上界,但是你的步驟是肯定的。換句話說,沒有從2開始到0(x-1)結束但是增加1的序列。

你寫了你的for循環,假定傳遞給它的數字是2或更大。當參數小於2時,您可能需要添加「基本情況」方案。

+0

'upper_bound'不包含在輸出中。它是upper_bound-1。 – floydn

-1

迭代空序列不會導致迭代。

>>> range(2, 1, 1) 
[] 
0

這裏是i是要遍歷:

>>> x = 1 
>>> range(2, x-1, 1) 
[] 

這是一個陣!這裏沒有什麼可做的。

1

你讓i運行在整數範圍2, 3, 4, ..., x-1。當x < 2時,範圍爲空,且循環從不輸入(因此循環體將根本不會執行)。

實際上,對於它的價值,當x <= 3時,循環爲空。這是因爲Python的range(A, B)將是一個整數範圍n,例如A <= n < B。請注意右側嚴格的不平等。