2016-03-02 84 views
0

我有這個類可以從主要方法中調用,該方法通過實現Erathostenes篩來查找列表中的所有素數。然而在該行python:列表分配索引超出範圍[erathostenes篩選]

nums[j] = 0 

我收到錯誤上面提到的:

列表分配索引超出範圍

這是我的代碼:

class Prime: 

def is_prime(self, num): 
    chk = False 
    for i in range(2,num): 
     if num % i == 0: 
      chk = True 
    return chk 

def sieve_of_erathos(self, num): 
    nums = [] 
    for i in range(2, num): 
     nums.append(i) 
    for i in range(2, num): 
     if i != 0: 
      for j in range(i+1, num): 
       if j % i == 0: 
        nums[j] = 0 
    primes = [] 
    for i in range (2, num): 
     if nums[i] != 0: 
      primes.append(nums[i]) 
    return primes 
+0

這是在範圍(i + 1,數量)j的問題:我猜 – tinySandy

+0

你的'is_prime'不正確,它返回''真'爲'12',我認爲你chk默認必須是真的',你應該在循環中假'False'並在那之後使用'break' – Arman

+0

@Arman然後布爾輸出由主函數處理,並且輸出相應地完成。在12的情況下,輸出是它不是素數。 – Logan

回答

0

的問題是你用範圍(2,num)填充你的數組。

這會在數組中創建num-2個空格,這意味着您只能撥打nums[num-3]

for j in range(i+1, num): 
      if j % i == 0: 
       nums[j] = 0 

你叫nums[num-1]所以使用

for i in range(2, num+2): 
     nums.append(i) 

代替。然後一切都應該工作