Python For If-Else
我刚刚意识到这个代码并没有按照我希望的方式工作Python For If-Else,python,if-statement,for-loop,Python,If Statement,For Loop,我刚刚意识到这个代码并没有按照我希望的方式工作 for i in [0,2,4]: if i%2==0: print i else: print "There are no EVEN #s" 那么,对这种结构进行编码的最佳方式是什么 如果“if”语句在“for”循环的所有迭代过程中都没有变为true,那么可以运行“else”语句代码。只需在if语句中设置一个标志,以便在for循环完成运行后进行检查 e、 g 代码不能按您希望的方式工作,因为if和else不在同一
for i in [0,2,4]:
if i%2==0:
print i
else:
print "There are no EVEN #s"
那么,对这种结构进行编码的最佳方式是什么
如果“if”语句在“for”循环的所有迭代过程中都没有变为true,那么可以运行“else”语句代码。只需在if语句中设置一个标志,以便在for循环完成运行后进行检查 e、 g
代码不能按您希望的方式工作,因为
if
和else
不在同一范围级别上。然而,Python中有一个for…else
语法,您可能正试图使用它。有关这方面的信息,请参阅。要使用for…else
语法,需要在for
循环中有一个break
语句。如果它中断,则不会调用else
,否则将在循环完成后调用else
但是,如果没有break
语句,则else
始终运行
这是您的代码,已更正:
for i in [0,2,4]:
if i%2==0:
print i
break
else:
print "There are no EVEN #s"
只要循环遇到偶数,循环就会中断。否则,如果循环将完全执行(即遍历整个列表),则它还将运行else
。仅供参考,以下是奇数列表上的循环:
for i in [1,3,5]:
if i%2==0:
print i
break
else:
print "There are no EVEN #s"
如果您只想检查是否存在偶数,而不关心值,请使用:
any
将在找到偶数后延迟计算返回True,如果列表不包含偶数,则延迟计算返回False 我认为一种更“pythonic”的方法是过滤列表,并检查过滤后的列表是否有任何元素来确定要打印的内容:
lst = [0, 2, 4]
filtered = [x for x in lst if x%2 == 0]
if filtered:
for item in filtered:
print item
else:
print "No evens"
如果您从未
break
(或return
),则else
始终运行。为了避免for
循环中出现else
语句,您需要break
循环。您需要一个状态变量,它以False
开头,在条件块中设置为True
,然后是一个条件break
。我以前使用过这个逻辑,但出于好奇,有没有其他方法可以使用try,除了catch?或something@Riddler找到第一个偶数时,只需添加一个break
。当然,还有其他方法可以做到这一点。此外,如果能实际包含您希望代码如何工作,以及它如何工作,这将非常有帮助。您需要实现您的逻辑。一种方法是先计算偶数,然后在循环后检查计数。或者,当找到偶数时,您可以设置flag。在开始时让flag=True
,在循环中的if
语句中设置flag=False
,这样在最后的if
语句中,您就可以使用if flag
而不是if not flag
,这是一个很好的解决方案。@Newb,谢谢,这可能不是OP想要的,但这是一件值得学习的好东西,在某个阶段毫无疑问会很有用。是的,这可能不太符合主题,但至少我学到了一些新的东西。
if any(i % 2 == 0 for i in [0,2,4,5]):
print "The list has even numbers"
else:
print "There are no EVEN #s"
lst = [0, 2, 4]
filtered = [x for x in lst if x%2 == 0]
if filtered:
for item in filtered:
print item
else:
print "No evens"