我正在制作一个复制埃拉托色尼筛子的类,并且一直得到标题中给出的错误消息。下面是我的代码,后面是更多的问题。
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)
因此,在函数findprime (self)中,特别是在第14行,我得到了标题中描述的错误消息。问题的根源到底是什么?
另外,我想问一些关于我的方法的问题。在findprime中,我尝试访问列表中的每个元素。如果它为真,我想取索引号(I)并访问所有其他是I的倍数的索引(I, I + I, I + I + I,等等)。我还没有完全测试过,但我觉得我的语法是错误的。如有任何帮助,不胜感激。
最后,我需要在方法howMany中使用reduce函数来确定列表中有多少元素为真,并返回该数字。再一次,任何关于这个话题的知识都是非常感谢的。
谢谢大家
在python中,for i in self.numbers
的工作方式类似于Java增强的For循环,其中For循环将遍历列表,i
将是列表条目(在您的示例中是True / False
)而不是索引。
如果您想访问列表索引,请使用for i in range(len(self.numbers))
, i
将从0
循环到(length of list - 1)
。