【问题标题】:What exactly is going on with the indentation here? [duplicate]这里的缩进到底是怎么回事? [复制]
【发布时间】:2019-12-19 00:33:30
【问题描述】:

第二个代码尝试打印范围之间的素数,但它未能做到这一点,并在范围之间多次打印一些数字 第一个代码,缩进看起来很荒谬完美运行,我不明白缩进是如何工作的

for num in range(lower,upper + 1):     
   for i in range(2,num):
       if (num % i) == 0:
           break
   else:
         print(num)

for num in range(lower,upper + 1):     
   for i in range(2,num):
       if (num % i) == 0:
           break
       else:
           print(num)

【问题讨论】:

  • 您可以在此处阅读有关 for-else 语句的信息:stackoverflow.com/a/114420/5079316
  • 谢谢。我刚发完这篇文章就发现了 else-for 关系,然后我无法删除它

标签: python python-3.x


【解决方案1】:

Python 有一个else 子句,不仅用于if,还用于for 循环。 for ... else 子句在循环被强制离开时触发 - 通过returnraisebreak - 但迭代正常完成。

for i in range(3):
    print(i)
else:
    print('done')

for i in range(5):
    print(i)
    if i == 3:
        break  # break skips the else clause
else:
    print('done')

对于您的代码,这意味着:

  • 在第一种情况下,else 触发如果 nonei 触发(num % i) == 0
  • 在第二种情况下,如果i 中的一个(或更多)没有触发(num % i) == 0,则else 触发。

【讨论】:

  • "... 第二种情况,否则触发 对于 i 的每个值 确实..."
  • @ScottHunter 这并不是排他性的。我已经把措辞更清楚了。
【解决方案2】:

关于第一个代码的缩进唯一“荒谬”的是最后的print 缩进比需要的多。

else,当应用于循环时,在循环耗尽时执行(而不是中断)。所以在第一个代码中,只要num 不能被任何i 整除,它就会被打印出来,这就是你想要的。

else,当应用于if 时,对封闭循环没有影响。特别是,内部循环将继续,这意味着 num 将为 每个 i 打印,而不是平均划分 num

【讨论】:

    【解决方案3】:

    您期望如果某个数字以下的任何数字不能被该数字整除,则 打印它

    或者你正在寻找一个数字是否有根

    在第二个代码中,每次检查数字的可分性时,您都会将代码序列传递给 else case。但是,正如预期的那样,只有在数字通过其下方所有数字的 if 条件后,您才必须打印该数字。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-13
      • 2018-08-17
      • 2012-05-10
      • 1970-01-01
      • 2016-03-25
      • 2011-10-13
      • 1970-01-01
      • 2016-04-28
      相关资源
      最近更新 更多