Python的循环体自己就有else分支!
Python的循环体自己就有else分支!
Python的循环体自己就有else分支!
不只是if有,while和for都有else分支。循环体的else分支触发条件是循环正常结束。如果循环内被break跳出,就不执行else。所以这个逻辑是:如果循环内break了,不触发else,则执行下一句外层循环中的break;如果正常结束,执行else分支里的continue,直接跳转到外层循环的下一轮,跳过了第二个break。
python中常用的两种退出循环方式,break和continue 举个例子更直接:1、以break方式退出循环:当某些条件成立,退出整个循环i = 1
# 例:吃5个苹果--循环:吃完第3个吃饱了,第4个和第5个不吃了(不执行--==4 或 》3)
while i <= 5:
# 条件:如果吃到第4或>3 打印吃饱了不吃了
if i == 4:
print('吃饱了,不吃了')
break
print(f'吃了第{i}个苹果')
i += 1
2、以continue方式退出循环:当条件成立,退出当前一次循环,继而执行下一次循环
# 例:吃5个苹果--循环:吃到第3个吃出一个虫子,第3个不吃了,继续吃第4和第5个
i = 1
while i <= 5:
# 条件
if i == 3:
print('吃出一个虫子,这个苹果不吃了')
# 如果使用continue,在continue之前一定要修改计数器,否则进入死循环
i += 1
continue
print('吃了第{i}个苹果')
i += 1
扩展:
while和for循环都可以配合else使用:
else下方缩进的代码含义:当循环正常结束后执行的代码
break终止循环不会执行else下方缩进的代码
continue退出循环的方式执行else下方缩进的代码
事实上,Python的标准语法是不支持跳出多重循环的,所以只能利用一些技巧,大概的思路有:写成函数、利用笛卡尔积、利用调试。写成函数
在Python中,函数运行到return这一句就会停止,因此可以利用这一特性,将功能写成函数,终止多重循环,例如
def work():for i in range(10):for j in range(10):if i+j >5:return i,jprint work()
利用笛卡尔积
这种方法的思路就是,既然可以跳出单循环,我就将多重循环改写为单循环,这可以利用itertools中的笛卡尔积函数product,例如
from itertools import productfor i,j in product(range(10), range(10)):if i+j >5:print i,jbreak
利用调试模式
笛卡尔积的方式很巧妙,也很简洁,但它只能用于每次循环的集合都是独立的情形,假如每层循环都与前一层紧密相关,就不能用这种技巧了。这时候可以用第一种方法,将它写成函数,另外,还可以利用调试模式。这个利用了调试模式中,只要出现报错就退出的原理,它伪装了一个错误出来。
class Found(Exception):passtry:for i in range(10):for j in range(i): #第二重循环跟第一重有关if i + j >5:raise Foundexcept Found:print i, j