2017-04-11 72 views
1

我試圖遍歷素數的列表,但是當我達到某個限制時我想停下來。使用while迭代條件列表?

def primetest(number,primelst): 
    limit = int(round(sqrt(number),0)+1) 
    while prime in primelst < limit: 
     if (number % prime) == 0: 
      return False 
    return True 

作爲FOR語句這個工程:

def primetest(number,primelst): 
    limit = int(round(sqrt(number),0)+1) 
    for prime in primelst: 
     if (number % prime) == 0: 
      return False 
    return True 

但這是緩慢的,因爲它通過所有的素數,在這裏我要重複,將停止當它擊中了極限迭代。所以while聲明似乎是一個更好的選擇,但我無法弄清楚正確的語法。

回答

5

只需添加一個檢查的循環體:

for prime in primelst: 
    if prime > limit: 
     break 
    # ... 

更新:我使用enumerate原本建議,但我看到你實際上要停止循環,當素數大於limit

+0

這個作品!非常感謝! –

1

如果你堅持使用一段時間,有什麼樣的循環可能會在工作的情況下這種方式:

def primetest(number,primelst): 
    i=0 
    limit = int(round(sqrt(number),0)+1) 
    while primelst[i] < limit: 
     if (number % primelst[i]) == 0: 
      return False 
     i=i+1 
    return True 
+0

感謝您的建議 - 但由於我的基本列表被添加到基於此功能的結果中,遞增索引然後測試primelst [i]會生成「超出範圍」錯誤。 –