【问题标题】:Tough time understanding the below Python Script很难理解下面的 Python 脚本
【发布时间】:2016-08-10 08:12:21
【问题描述】:

我是编码新手,我很难理解下面的代码,它打印出所有低于 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 对吗?请帮我理解。

【问题讨论】:

  • 你可以……在这里和那里添加一些print 语句来理解这段代码的作用……?!
  • 很难看到,但 else 看起来像是 for 循环的一部分,所以它会首先附加 2,然后在 for 循环中开始使用 if 条件进一步的迭代
  • 代码的格式看起来不对。确保你更正它。
  • 我已经纠正了缩进,假设它是for..else,因为据说这段代码正在工作。

标签: python python-3.x


【解决方案1】:

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

在随后的迭代中,primes 中有 的内容,因此循环将被调用,p 将填充值。

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

简而言之,算法是:对于 2…10 的数字,如果该数字不是已发现素数的倍数,则它是素数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-14
    • 2010-11-07
    • 1970-01-01
    • 2015-05-24
    • 2020-12-02
    • 1970-01-01
    相关资源
    最近更新 更多