当循环结束时会发生啥?

Posted

技术标签:

【中文标题】当循环结束时会发生啥?【英文标题】:What happens when loop gets to the end?当循环结束时会发生什么? 【发布时间】:2014-01-30 16:53:39 【问题描述】:

我是python初学者,没有以前的编程知识。我为这个话题的名字道歉,但我根本无法做出更好的话题。 这是我想要的:

letter = "w"   # search for this letter in the list bellow
listL = ["z","b","y","a","c"]

for let in listL:
    if let == letter:
        print "found it"
        break
    else:
        if  let == listL[-1]:
            print "nope can't find it"
        continue

我有一个字母列表,我想在该列表中搜索一个特定的字母。 如果我找到了这封信,那么一切正常,for 循环应该停止。 如果我没有找到它,我希望循环停止当前的迭代,并尝试使用列表中的下一个字母。如果列表中没有一个字母具有该特定字母,则应打印“nope can't find it”。

上面的代码有效。但我想知道这是否可以写得清楚一点?显然,我的意思不是“高级”,而是学者的方式,书本上的例子。

谢谢。

【问题讨论】:

【参考方案1】:

Python 为 for 循环提供了一个 else 语句,如果循环结束而没有被破坏,则执行该语句:

for let in llistL:
    if let == letter:
        print("Found it!")
        break
else:
    print("nope could'nt find it")

这将是 for 循环的“学术方法”,但是如果您只是测试列表中某个元素的存在,那么 Arkady 的答案就是要遵循的。

【讨论】:

感谢Cilyan的回复。我现在还没有看到“for:else:”这个概念。 我在这个网站上学到的 ;): ***.com/questions/101268/hidden-features-of-python 你可以在那里找到更多有用的结构。【参考方案2】:

怎么样:

if letter in listL:
    print "found it"
else:
    print "nope..."

【讨论】:

【参考方案3】:

只需在中使用

if let in listL:
    print("Found it")
else:
    print("Not found")

编辑:你快了 30 秒,恭喜 ;)

【讨论】:

【参考方案4】:

您的循环将继续循环,直到它中断(找到它!)或列表耗尽。您不需要做任何特别的事情来“停止当前的迭代,并尝试使用列表中的下一个字母”。当字母不匹配时,我们不需要continue,只要有更多字母要检查,就会自动发生。

我们只想在搜索完整个列表后显示“nope can't find it”,所以我们不需要检查到最后。这个else 语句对应于for 循环,而不是您之前代码中的if

letter = "w"   # search for this letter in the list bellow
listL = ["z","b","y","a","c"]

for let in listL:
  if let == letter:
    print "found it"
    break #found letter stop search
else: #loop is done, didn't find matching letter in all of list
  print "nope can't find it"

【讨论】:

【参考方案5】:

在 Python 中实际上有一个 for: else: 构造,如果 for 循环没有 break

else 将在其中运行
for let in listL:
    if let == letter:
        print("Found it")
        break
else:
    print("Not found")

或者,您可以使用list.index,如果在列表中找到,它将给出项目的索引,如果没有找到,则会引发ValueError

try:
    index = listL.index(letter)
except ValueError:
    print("Not found")
else:
    print("Found it")

【讨论】:

真的有必要把别人的答案加到你的底部吗? user3254059 的文字复制和粘贴,至少给他点赞…… 我没有复制粘贴,但同意没有必要在这里重复两次。 其实我不熟悉“try”和“except”的概念,所以你的回复也很有用。谢谢。

以上是关于当循环结束时会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章

当 getline() 读取的行大于系统内存时会发生啥?

为啥我不使用 for 循环时会发生正确的碰撞,但是当我使用 for 循环时只有 1 个对象有碰撞?

动作脚本 3. 在 gotoAndStop() 之后动画永远循环,并且在动画过程中当角色发生碰撞时会有延迟

为啥这个 switch 语句在运行时会结束 while 循环?

结束 mpirun 进程会终止 bash 循环

java nio 方面的,我不明白while(true)表示啥?