2016-10-06 19 views
0

我正在研究一個複製Eratosthenes Sieve的類,並且已獲取給出的錯誤消息標題。以下是我的代碼,更多問題隨之而來。Python 3.x - 無法修復錯誤:「切片索引必須是整數或無或有__index__方法」+更多

class Sieve: 

def __init__(self, max): 
    if max < 0: 
     raise RuntimeError 
    else: 
     self.numbers = [([False] * 2) + ([True] * (max - 1))] 

def findPrimes(self): 
    for i in self.numbers: 
     if self.numbers: 
      for j in self.numbers[i:]: 
       if j % i == 0: 
        self.numbers[j] = False 
       else: 
        None 
     else: 
      None 

def howMany(self):   ##Must use reduce 
    reduce((lambda i: True if numbers else False), self.numbers, self.numbers[2:]) 

def toList(self): 
    T = [L[i] for i in self.numbers] 
    return print(self.numbers) 

所以在功能findPrimes(個體),特別是在線路14,I得到標題所述的錯誤消息。問題的根源究竟是什麼?

此外我想問幾個關於我的方法的問題。在findPrimes中,我試圖訪問列表中的每個元素。如果確實如此,我想採用索引號(i)並訪問所有其他指數(i,i + i,i + i + i等)的倍數。我還沒有完全測試過,但我覺得我的語法錯了。任何幫助表示讚賞。

最後,我需要在方法howMany中使用reduce函數來確定列表中有多少元素爲真,並返回該數字。再次,任何有關該主題的知識非常感謝。

謝謝大家:)

+0

運行腳本時,我得到'IndentationError:unexpected indent'。 –

+0

檢查'self.numbers'。這不是你的想法。 – user2357112

+0

@ user2357112恐怕我不明白你在想什麼。 –

回答

1

在蟒蛇,​​作品像Java增強的for循環,在For循環會遍歷列表,i將是列表條目(在你的情況,True/False),而不是指數。

如果要訪問列表索引,請使用for i in range(len(self.numbers)),i將從0循環到(length of list - 1)

相關問題