很难理解下面的Python脚本

时间:2016-08-10 08:12:22

标签: python python-3.x

我是编码的新手,我正在深入理解下面的代码,它会打印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对吗?请帮我理解。

1 个答案:

答案 0 :(得分:0)

空列表上的for..in循环基本上什么都不做;它说“对于这个列表中的每个元素,做一些事情”,并且由于列表中没有任何内容,它什么都不做。因此,在外部循环的第一次迭代中,for p in primes根本不执行任何操作,并调用else子句。

在后续迭代中, primes中的某些内容,因此将调用循环并使用值填充p

else循环的for..in子句将在循环结束时执行,除非循环被break中断。这正是正在你的代码上发生:如果循环找到一个可分的数字,那么break是循环并且没有任何反应,否则该数字将被添加到primes

简而言之,算法是:对于2 ... 10的数字,如果数字不是已经发现的素数的倍数,那么它就是素数。