当循环结束时会发生啥?
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”的概念,所以你的回复也很有用。谢谢。以上是关于当循环结束时会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我不使用 for 循环时会发生正确的碰撞,但是当我使用 for 循环时只有 1 个对象有碰撞?
动作脚本 3. 在 gotoAndStop() 之后动画永远循环,并且在动画过程中当角色发生碰撞时会有延迟