为啥这个 `else` 块可以工作,但它与 `if` 情况不在同一级别? [复制]

Posted

技术标签:

【中文标题】为啥这个 `else` 块可以工作,但它与 `if` 情况不在同一级别? [复制]【英文标题】:Why does this `else` block work yet it is not on the same level as the `if` case? [duplicate]为什么这个 `else` 块可以工作,但它与 `if` 情况不在同一级别? [复制] 【发布时间】:2017-11-17 12:22:11 【问题描述】:

这段代码运行得很好,并生成了所需的素数列表。但是打印我们的素数的else 块超出了块,但它仍然有效,有人可以向我解释一下吗?

for num in range(0, 100 + 1):
   # prime numbers are greater than 1
   if num > 1:
       for i in range(2, num):
           if (num % i) == 0:
               break
       else:
           print(num)

参考:programiz.com

【问题讨论】:

是for-else子句。您可以在 SO 或一些教程网站中轻松找到有关它的文档。 【参考方案1】:

Python 有一个简洁的for-else construct:

For 循环还有一个我们大多数人都不熟悉的 else 子句。 else 子句在循环正常完成时执行。这意味着循环没有遇到任何中断。

【讨论】:

【参考方案2】:

循环中 else 子句的一个常见用例是实现搜索循环;假设您正在搜索满足特定条件的项目,如果找不到可接受的值,则需要执行额外的处理或引发错误。

参考https://shahriar.svbtle.com/pythons-else-clause-in-loops

【讨论】:

【参考方案3】:

其实区块for也有关键字else

for-else document

【讨论】:

添加链接,让您的回答更有帮助:)

以上是关于为啥这个 `else` 块可以工作,但它与 `if` 情况不在同一级别? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

verilog中if else中能套if else吗,有啥错误啊,为啥??? case中能套if else吗 case中能套case吗

为啥这个 if 语句不返回布尔值?

表单验证灯箱 php if/else 语句

为啥JAVA源码中if else大都省略else,怎样的条件能够省去else?

if判断

if while 格式化输出