以下是我试图理解的代码:
这段代码是对Erastothenes的筛选的实现。如果我理解正确的话,那么到第8行,代码创建了一个素数到N的列表,这个列表是一个布尔列表,其中True-素数;False-非素数;索引号与我们输出的数字匹配。你知道吗
我的问题是: 对于第9-13行,脚本是否用新列表中的索引和布尔值“重写”素数(它们只是真值),以便我们在最后打印它们? 另外,如果primes是一个布尔列表,为什么python会在末尾打印索引值而不是一堆真参数?你知道吗
更新:我知道了,谢谢大家!range是一组2-n+1的整数,因此我也是整数,这就是为什么我在primes字符串中得到整数。出于某种原因,我认为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.append(i)
仅附加其参数i
。没有什么魔法能在列表中附加任何东西。你知道吗在您的代码中,有两个独立的列表:
list1
和primes
:第一个包含每个非负整数的布尔值。
第二个包含在第一个循环末尾
list1
包含True
的整数(这就是if list1[i]
检查所做的)。循环
for i in range(2, N + 1):
在实际索引上循环。它测试list1[i]
中的布尔值,但只存储索引。布尔值(list1[i]
)无需编写;您append
编辑了i
这一事实表明测试已通过,并且i
已知对应于一个素数。因为primes
是从头开始构建的,所以它根本不包含布尔值,只包含在最后一个循环中分配给它的各种i
值(测试并找到prime)append
。你知道吗相关问题 更多 >
编程相关推荐