Python的for和break循环结构中使用else语句的技巧


Posted in Python onMay 24, 2016

在Python中的while或者for循环之后还可以有else子句,作用是for循环中if条件一直不满足,则最后就执行else语句。

for i in range(5):
 if i == 1:
  print 'in for'
else:
 print 'in else'

print 'after for-loop'

# in for
# in else
# after for-loop

但我们发现if条件在循环的过程中成立了,最终还是执行了else语句里的内容,这是为什么呢?

好的,我们这时看下面这段程序:

for i in range(5):
 if i == 1:
  print 'in for'
  break
else:
 print 'in else'

print 'after for-loop'


# in for
# after for-loop

我们在if里添加了一个break,这是因为else是在for后执行的,但只有for循环正常退出时才会执行else语句(不是由break结束循环)。而当循环是由break语句中断时,else就不被执行。

for/else等效于下面这段代码,可以类似C语言那样添加一个flag:

found = False
for i in range(5):
 if i == 1:
  found = True
  print 'in for'
if not found:
 print 'not found'

print 'after for-loop'


# in for
# after for-loop

与for语句相似,while语句中的else子句用法是一样的,else块在循环正常结束和循环条件不成立时执行。

对于条件语句 if- else 我们已经很熟悉了, 但是在Python中,for-else用于处理遍历失败。

比如我们要实现这样一个功能:找出(81,99)中最大的完全平方数并输出,找不到则输出提示。

如果用c++的for循环实现,必须手动的判断for循环是否遍历失败:

#include <iostream> 
#include<math.h> 
using namespace std; 
int main() 
{ 
 int i; 
 float n; 
 for(i=99;i>81;i--) 
 { 
  n=sqrt((float)i); 
  if(n==int(n)) 
  { 
   cout<<i; 
   break; 
  } 
 } 
 if(i==81) //边界判断 
  cout<<"didn't find it!"<<endl; 
 return 0; 
}

而用Python的for-else则可简单的实现这一功能:

from math import sqrt 
for n in range(99,81,-1): 
 root = sqrt(n) 
 if root == int(root): 
  print n 
  break 
else: 
 print"Didn't find it!"

在for循环完整完成后才执行else;如果中途从break跳出,则连else一起跳出。

特别需要注意的是如果for中有if语句,else的缩进一定要和for对齐,如果和if对齐,则变成if-else语句,会产生意想不到的错误如下:

from math import sqrt 
for n in range(99,81,-1): 
 root = sqrt(n) 
 if root == int(root): 
  print n 
  break 
 else: 
  print"Didn't find it!"

虽然使用for-else节省两行代码同时便于阅读,但是容易和if-else混淆。貌似实际中不会常用,反而更倾向于手动处理。

Python 相关文章推荐
python中requests使用代理proxies方法介绍
Oct 25 Python
Python tkinter实现的图片移动碰撞动画效果【附源码下载】
Jan 04 Python
Python生成器以及应用实例解析
Feb 08 Python
python射线法判断一个点在图形区域内外
Jun 28 Python
MxNet预训练模型到Pytorch模型的转换方式
May 25 Python
基于python requests selenium爬取excel vba过程解析
Aug 12 Python
Python生成并下载文件后端代码实例
Aug 31 Python
Python Merge函数原理及用法解析
Sep 16 Python
Django用内置方法实现简单搜索功能的方法
Dec 18 Python
Selenium Webdriver元素定位的八种常用方式(小结)
Jan 13 Python
用Python自动清理系统垃圾的实现
Jan 18 Python
分享Python异步爬取知乎热榜
Apr 12 Python
Python3连接MySQL(pymysql)模拟转账实现代码
May 24 #Python
用Python写一个无界面的2048小游戏
May 24 #Python
Python实现二叉树结构与进行二叉树遍历的方法详解
May 24 #Python
Python中set与frozenset方法和区别详解
May 23 #Python
python实现多线程的两种方式
May 22 #Python
python实现简单购物商城
May 21 #Python
python字符串的常用操作方法小结
May 21 #Python
You might like
PHP GD 图像处理组件的常用函数总结
2010/04/28 PHP
PHP 面向对象 final类与final方法
2010/05/05 PHP
PHP的SQL注入过程分析
2012/01/06 PHP
thinkphp Apache配置重启Apache1 restart 出错解决办法
2017/02/15 PHP
actionscript与javascript的区别
2011/05/25 Javascript
jQuery EasyUI API 中文文档 - NumberBox数字框
2011/10/13 Javascript
JavaScript实现带箭头标识的多级下拉菜单效果
2015/08/27 Javascript
基于touch.js手势库+zepto.js插件开发图片查看器(滑动、缩放、双击缩放)
2016/11/17 Javascript
jquery 手势密码插件
2017/03/17 Javascript
深究AngularJS——ng-checked(回写:带真实案例代码)
2017/06/13 Javascript
详解Node.js异步处理的各种写法
2019/06/09 Javascript
微信小程序如何调用新闻接口实现列表循环
2019/07/02 Javascript
Webpack中loader打包各种文件的方法实例
2019/09/03 Javascript
layui 数据表格+分页+搜索+checkbox+缓存选中项数据的方法
2019/09/21 Javascript
使用vue实现HTML页面生成图片的方法
2020/03/12 Javascript
在vue中实现禁止回退上一步,路由不存历史记录
2020/07/22 Javascript
[59:48]LGD vs IG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
用Python实现斐波那契(Fibonacci)函数
2016/03/25 Python
浅谈python对象数据的读写权限
2016/09/12 Python
python通过elixir包操作mysql数据库实例代码
2018/01/31 Python
pandas修改DataFrame列名的方法
2018/04/08 Python
python将秒数转化为时间格式的实例
2018/09/16 Python
Python基础之循环语句用法示例【for、while循环】
2019/03/23 Python
python 进程 进程池 进程间通信实现解析
2019/08/23 Python
python实现截取屏幕保存文件,删除N天前截图的例子
2019/08/27 Python
python判断链表是否有环的实例代码
2020/01/31 Python
VSCode基础使用与VSCode调试python程序入门的图文教程
2020/03/30 Python
东南亚地区最大的购物网站Lazada新加坡站点:Lazada.sg
2016/07/17 全球购物
linux系统都有哪些运行级别
2012/04/15 面试题
Java Servlet的主要功能和作用是什么
2014/02/14 面试题
党员创先争优公开承诺书
2014/03/28 职场文书
世界环境日活动总结
2015/02/11 职场文书
军训决心书范文
2015/09/22 职场文书
如何在pycharm中快捷安装pip命令(如pygame)
2021/05/31 Python
Java 实现限流器处理Rest接口请求详解流程
2021/11/02 Java/Android
mybatis源码解读之executor包语句处理功能
2022/02/15 Java/Android