【发布时间】:2019-10-08 19:04:09
【问题描述】:
这是我想要理解的代码:
代码是 Erastothenes 筛法的实现。如果我理解正确,那么直到第 8 行,代码会创建一个最多为 N 的素数列表,该列表是一个布尔列表,其中 True - prime; False - 非素数;并且索引号与我们输出的数字匹配。
我的问题是: 对于第 9-13 行,脚本是否使用新列表中的索引和布尔值“重写”素数(它们只是 True 值),以便我们在最后打印它们? 另外,如果 primes 是一个布尔列表,为什么 python 在末尾打印索引值而不是一堆 True 参数?
更新:我知道了,谢谢大家! range 是一组从 2 - n+1 的整数,因此 i 也是整数,这就是我在素数字符串中得到整数的原因。出于某种原因,我最初将 range 视为 list1
def sita(N):
list1 = [True for _ in range(N + 1)]
list1[0:1] = [False, False]
for start in range(2, N + 1):
if list1[start]:
for i in range(2 * start, N + 1, start):
list1[i] = False
primes = [] #create empty list
for i in range(2, N + 1):
if list1[i]:
primes.append(i)
return primes
print(sita(int(input("Dati un numar N: "))))
【问题讨论】:
-
primes 不是布尔值列表。这就是第二个循环的全部要点。你能澄清一下“用索引和布尔值重写”的意思吗?
-
我的意思是,它采用 True 的值并将它们重写到具有相同旧索引和值的新列表中
标签: python