我是编码的新手,我正在深入理解下面的代码,它会打印10以下的所有素数。
N = 10
primes = []
for n in range(2,N+1):
for p in primes:
if n % p == 0: break
else:
primes.append(n)
print(primes)
我的问题是 - 第一次迭代时p的值是多少?不是0吗?如果是这样,n%p总是0对吗?请帮我理解。
答案 0 :(得分:0)
空列表上的for..in
循环基本上什么都不做;它说“对于这个列表中的每个元素,做一些事情”,并且由于列表中没有任何内容,它什么都不做。因此,在外部循环的第一次迭代中,for p in primes
根本不执行任何操作,并调用else
子句。
在后续迭代中, 在primes
中的某些内容,因此将调用循环并使用值填充p
。
else
循环的for..in
子句将在循环结束时执行,除非循环被break
中断。这正是正在你的代码上发生:如果循环找到一个可分的数字,那么break
是循环并且没有任何反应,否则该数字将被添加到primes
。
简而言之,算法是:对于2 ... 10的数字,如果数字不是已经发现的素数的倍数,那么它就是素数。