导读:条件语句通过一个或多个布尔表达式的执行结果(真值或假值)决定下一步的执行方向。所谓布尔表达式,即对某个对象进行布尔运算,产生一个bool值。条件语句的运行逻辑为:如果条件被满足(返回真值),可以做某件事情;如果条件不满足(返回假值),就做另一件事情,或什么也不做。

作者:李明江 张良均 周东平 张尚佳

如需转载请联系大数据(ID:hzdashuju)

通过图1,可以对条件语句的运行机制作有一个简单的了解。虚线框内是一个选择结构,此结构中包含一个判断条件和两条执行语句,以及连接各部分的流向线。根据判断条件(布尔表达式)返回值的情况,程序将选择执行语句1或语句2。

▲图1 条件语句结构

在Python中,实现选择结构最普遍的工具是if语句。此外,try语句专门用于异常处理,其内在逻辑也符合选择结构。

01 if、elif与else

if语句中包含3种条件判断句式,即if、elif和else。其中,if与elif部分都包含判断条件,当判断条件都不成立时,程序才能执行else部分的代码。

if语句最基础的形式是if-else,其基本语法格式如下。

if 条件表达式:操作语句1
else:操作语句2

if-else语句常用的参数及说明:

  • 条件表达式:接收布尔表达式,表示判断条件是否成立。无默认值

  • 操作语句:接收操作语句,表示执行一段代码。无默认值

if-else语句执行时,程序首先判断if部分条件表达式的真假。如果条件表达式返回真值,则执行操作语句1;如果返回假值,则执行操作语句2。

if-else语句的形式很简单,通过条件判断的结果即可决定下一步的执行方向,具有两条分支。以编写一个账户密码登录界面为例,介绍该语句的使用,如代码清单①所示。

  • 代码清单① if-else语句实现登录界面

In[1]:    name = input ('请输入用户名:')password = input ('请输入密码:')if name == "Lucy" and password == "123456":print ('****登录成功,欢迎!*****')else:print ('-----您的输入有误,登录失败!-----')    Out[1]:    请输入用户名:Lucy请输入密码:123-----您的输入有误,登录失败!-----  In[2]:    name = input ('请输入用户名:')password = input ('请输入密码:')if name == "Lucy" and password == "123456":print ('****登录成功,欢迎!*****')else:print ('-----您的输入有误,登录失败!-----')    Out[2]:    请输入用户名:Lucy请输入密码:123456****登录成功,欢迎!*****   

在代码清单①中,使用input函数以支持交互式的输入,并在函数括号内插入文字进行了输入提示,增强了登录界面的人性化。在if部分的条件判断式中,使用and运算符进行且运算,只有账户和密码都输入正确才能成功登录,从而增加了安全性。

if-else语句可以缩减为单行形式,其基本语法格式如下。

操作语句1 if 条件表达式 else 操作语句2

if-else语句单行形式语法格式中的参数说明与图1一致。如果条件表达式返回的结果为真,则执行if前面的操作语句1,否则执行else后面的操作语句2。

if-else语句使用单行形式的目的主要在于增加代码的简洁性,其基本使用方法如代码清单②所示。

  • 代码清单② if-else语句的单行形式

In[3]:    num1, num2 = 11, 90print('num1加num2为百分数') if 1000 > num1 + num2 >100 else print('num1加num2不为百分数') Out[3]:    num1加num2为百分数

if-else语句有明显的缺陷,即只能实现两条分支。实际工作中需要用到的条件分支数目可能难以想象,扩展if语句的分支需要用到elif句式。elif是“else if”的缩写,即“下一条件是否成立?”。

使用elif有简洁、减少过分缩排的效果。将elif代码块放在if和else之间,就组成了if-elif-else语句。理论上,if语句中的elif可以无限多。if-elif-else语句与if-else语句其实是等价的,后者相当于前者中elif个数为0或不执行的情况。由于if-elif-else语句能提供更多条件分支,因此被普遍使用,其基本语法格式如下。

if 条件表达式1:操作语句1
elif 条件表达式2:操作语句2
else:操作语句3

if-elif-else语句语法格式中的参数与上文说明一致。该语句执行时,按照从上到下的顺序,依次检查每个条件表达式返回值的情况,任何一个条件表达式返回真值,就执行该表达式下面的操作语句。若所有条件表达式都返回假值,则执行else下面的操作语句。

if-elif-else语句相对于if-else语句优势明显,可以实现更为复杂的功能。使用if-elif-else语句实现年龄段的判断,如代码清单③所示。

  • 代码清单③ 使用if-elif-else语句实现年龄段的判断

In[4]:    age = input('请输入您的年龄:')age = int(age)if age < 18:print('未成年人!')elif age >= 18 and age <= 25:print('青年人!')elif age > 25 and age <= 60:print('中年人!')else:print('老年人!')   Out[4]:    请输入您的年龄: 20青年人!

代码清单③通过比较运算符实现了年龄段划分,并能区分年龄段界限,避免逻辑出错。input函数将接收的任何数据类型都默认为str,如果不在该代码中插入转换接收数据类型的语句,程序将无法执行。这是因为,接收的年龄数据会被用于和后续的年龄数值比较,而number与str是无法比较的。

需要说明,if语句还有一种形式是if-if-else,这一形式中的if可以有多个,从而实现多分支。与if-elif-else语句相比,差异不仅仅存在于形式上,性能上也同样有区别,使用多个if的效率更低,它实际上是多重if语句。

if语句支持嵌套,即在一个if语句中嵌入另一个if语句,从而构成不同层次的选择结构。嵌套的意义在于实现多层选择结构。使用嵌套对条件语句的功能有升华作用,这与elif是相似的,elif将有限的条件分支扩展,嵌套则提供了建立多层选择结构的工具,两者分别在不同的维度上提升了if语句的功能性。使用嵌套需要以不同的缩进长度划分代码结构的层次,因此嵌套时要特别注意缩进的规范性。

嵌套选择结构具有很广的应用场景,以下给出一个例子。假设系统中存储了5个用户的身份信息,分别是:来自英国的Tom,35岁;来自法国的Frank,35岁;来自德国的Bob,35岁;来自澳大利亚的Washington,51岁;来自南非的Jane,21岁。

设计一个程序,询问用户的部分信息,在对方不说出自己名字的情况下识别其身份,如代码清单④所示。

  • 代码清单④ 嵌套if-elif-else语句

In[5]:    age = input('请输入你的年龄:')age = int(age)if age == 35:nation = input('请输入你的国籍:')if nation == '英国':print('你是Tom! ')elif (nation == '法国'):print('你是Frank! ')else:print('你是Bob! ')elif age == 21:print('你是Jane,来自南非! ')elif age == 51:print('你是Washington,来自澳大利亚! ')else:print('请输入正确年龄值! ')  Out[5]:    请输入你的年龄:35请输入你的国籍:法国你是Frank!

从代码清单④可以看到,该程序具有两层选择结构。第1层用于询问年龄,程序通过接收的年龄,可以判断输入者是Jane、Washington或其他3个同龄人中的一个;若收到的值不在这5人年龄范围中,则提示输入出错;若收到的值是3个同龄人的岁数,则进入下一层选择结构,即询问国籍;通过询问国籍,程序可以准确报出输入者的信息。

使用if语句时,需要注意以下几点。

  1. 条件判断语句应尽量简单,若语句复杂则应当将运算先放到一个变量中。

  2. Python的条件语句中允许常用的数值比较运算(==,!=,>,>=,<,<=)。

  3. Python允许无限次if语句嵌套,但实际编程中如果必须用到3级到4级嵌套,建议考虑用其他方法编写代码,嵌套超过两层会使程序的运行效率大打折扣。

02 try、except与else

如果运行途中发生错误事件,程序的执行将中断,并创建异常对象。异常是程序在正常流程控制以外采取的动作,当它被引发时,计算机将自动寻找异常处理程序,以帮助程序恢复正常运行。

要保证程序的正常运行,就需要排除错误,错误要么是语法上的,要么是逻辑上的。语法错误的出现表明程序在结构上出现了问题,可以在程序执行前加以纠正。逻辑错误可能是缺少输入或输入不正确,某些情况下,也可能是根据输入无法生成预期的结果。逻辑错误难以预防,必须使用异常处理程序来应对。

计算机语言针对可能出现的错误定义了异常类型,某种错误引发对应的异常时,异常处理程序将被启动,从而恢复程序的正常运行。Python中定义的异常类型大致分为数值计算错误、操作系统错误、无效数据查询、Unicode相关的错误和警告等几类,如下所示。

Python异常类:

  • BaseException:所有异常的基类

  • Exception:常规异常的基类

  • StandardError:所有的内建标准异常的基类

  • ArithmeticError:所有数值计算异常的基类

  • FloatingPointError:浮点计算异常

  • OverflowError:数值运算超出最大限制

  • ZeroDivisionError:除零

  • AssertionError:断言语句失败

  • AttributeError:对象不包含某个属性

  • EOFError:没有内建输入,到达EOF标记

  • EnvironmentError:操作系统异常的基类

  • IOError:输入/输出操作失败

  • OSError:操作系统异常

  • WindowsError:系统调用失败

  • ImportError:导入模块/对象失败

  • KeyboardInterrupt:用户中断执行

  • LookupError:无效数据查询的基类

  • IndexError:序列中没有此索引

  • KeyError:映射中没有这个键

  • MemoryError:内存溢出异常

  • NameError:未声明/初始化对象

  • UnboundLocalError:访问未初始化的本地变量

  • ReferenceError:弱引用试图访问已经垃圾回收了的对象

  • RuntimeError:一般的运行时异常

  • NotImplementedError:尚未实现的方法

  • SyntaxError:语法错误导致的异常

  • IndentationError:缩进错误导致的异常

  • TabError:Tab和空格混用

  • SystemError:一般的解释器系统异常

  • TypeError:对类型无效的操作

  • ValueError:传入无效的参数

  • UnicodeError:Unicode相关的异常

  • UnicodeDecodeError:Unicode解码时的异常

  • UnicodeEncodeError:Unicode编码错误导致的异常

  • UnicodeTranslateError:Unicode转换错误导致的异常

  • Warning:警告的基类

  • DeprecationWarning:关于被弃用的特征的警告

  • FutureWarning:关于构造将来语义会有改变的警告

  • UserWarning:用户代码生成的警告

  • PendingDeprecationWarning:关于特性将会被废弃的警告

  • RuntimeWarning:可疑的运行时行为(runtime behavior)的警告

  • SyntaxWarning:可疑语法的警告

  • ImportWarning:用于在导入模块过程中触发的警告

  • UnicodeWarning:与Unicode相关的警告

  • BytesWarning:与字节或字节码相关的警告

  • ResourceWarning:与资源使用相关的警告

异常体系内部有层次关系,即某些异常属于某个异常的子类,该异常又可能是另一异常的子类。较低层次、更具细节的异常是某些异常的子类,这些高层次的异常则称为基类,子类和基类是相对的。Python异常体系中的部分关系如图2所示。

▲图2 Python常见异常体系

在图2中,越下面的异常,其层次越低,细节更明显,它们总有更高层次的基类。

Python使用try语句处理异常,该语句一般包括try、except和else三个句式,组成try-except-else的形式。try部分包含一个尝试执行的代码块,except部分是特定异常的处理对策,else部分则在程序运行正常时执行。

try语句可以视为一种条件分支,与if语句的区别是try语句并不包含条件判断式,执行的流向也不取决于条件表达式,而依赖于代码块能否执行。但其内在逻辑和运行流程与if语句是相似的,符合条件分支的特征,其基本语法格式如下。

try:操作语句1
except 错误类型1:操作语句2
except 错误类型2:操作语句3
else:操作语句4

try语句常用的语法格式及其参数说明如下所示。

try-except-else语句常用的语法格式及其参数说明:

  • 错误类型:接收Python异常名,表示符合该异常则执行下面语句。无默认值

  • 操作语句:接收操作语句,表示执行一段代码。无默认值

运行try-except-else语句时,程序首先执行try代码块,即可能出错的试探性语句,这可能导致致命性错误使得程序无法继续执行;如果try代码块确实无法执行,就可能执行某个except代码块。

执行一个except代码块的条件是,系统捕捉的异常类型和该代码块标识的类型相符合;如果try代码块的语句正常执行,就接着执行else代码块的语句。

如果try部分无法执行,也没有找到相应的except代码块,就将异常消息发送给程序调用端,如Python Shell,Python Shell对异常消息的默认处理则是终止程序的执行并打印具体的出错信息。这也是在Python Shell中执行程序错误后所出现的出错打印信息的由来。

在try语句中,except与else代码块都是可选的。except代码块可以有0或多个;else代码块可以有0或1个。但要注意,else语句的存在必须以except语句的存在为前提,在没有except语句的try语句中使用else语句,会引发语法错误。

try语句中没有else时,就构成try-except语句,如代码清单⑤所示。

  • 代码清单⑤ try语句处理除零异常

In[6]:    number = 0# 以变量number作被除数,尝试运行除法操作try:print('1.0 / number =', 1.0 / number)# 如果异常是除零异常,输出提示信息except ZeroDivisionError:print('***除数为0***') Out[6]:    ***除数为0***

在代码清单⑤中,由于0不能做除数,因此引发了除零异常。except代码块由于给出了ZeroDivisionError的解决方案,因此被执行,程序得以完整地运行。

代码清单⑤所展示的异常之间的层次差别是有意义的,这在程序执行过程中可以体现,如代码清单⑥所示。

  • 代码清单⑥ Python异常层次差异

In[7]:    dict1={'a': 1, 'b': 2, 'v': 22}# 尝试索引赋值dict中不存在的值try:x = dict1['y']except LookupError:print('查询错误')except KeyError:print('键错误')else:print(x)    Out[7]:    查询错误    In[8]:    # 调换LookupError和KeyError处理代码块的顺序dict2={'a': 1, 'b': 2, 'v': 22}# 尝试索引赋值dict中不存在的值try:x = dict2['y']except KeyError:print('键错误')except LookupError:print('查询错误')else:print(x)    Out[8]:    键错误 

代码清单⑥展示的try-except-else语句尝试查询不在dict中的键值对,从而引发了异常。这一异常准确地说应属于KeyError,但由于KeyError是LookupError的子类,且在代码清单⑥中将LookupError置于KeyError之前,因此程序优先执行该except代码块。所以,使用多个except代码块时,必须坚持对其规范排序,要从最具针对性的异常到最通用的异常。

除自然发生的异常外,Python中的raise语句可用于故意引发异常。使用该语句引发异常时,只需在raise后输入异常名即可,如代码清单⑦所示。

  • 代码清单⑦ raise语句

In[9]:    # 尝试引发IndexErrortry:raise IndexErrorexcept KeyError:print ('in KeyError except')except IndexError:print('in IndexError except')else:print('no exception')   Out[9]:    in IndexError except

本文摘编自《Python3智能数据分析快速入门》,经出版方授权发布。

延伸阅读《Python3智能数据分析快速入门》

点击上图了解及购买

转载请联系微信:DoctorData

推荐语:本书假设你有一定的数据分析基础,但是没有Python和AI基础,为了帮助你快速掌握智能数据分析需要的技术和方法,书中有针对性地讲解了Python和AI中必须要掌握的知识点,内容由浅入深,循序渐进。从环境配置、基本语法、基础函数到第三方库的安装与使用,对各个操作步骤、函数、工具、代码示例等的讲解非常详尽,确保所有满足条件的读者都能快速入门。

开学季满减福利进行中

长按小程序码发现更多好书

「大数据」内容合伙人之「鉴书小分队」上线啦!

最近,你都在读什么书?有哪些心得体会想要跟大家分享?

数据叔最近搞了个大事——联合优质图书出版商机械工业出版社华章公司发起鉴书活动。

简单说就是:你可以免费读新书,你可以免费读新书的同时,顺手码一篇读书笔记就行。详情请在大数据公众号后台对话框回复合伙人查看。

有话要说?

Q: 关于Python条件语句,你还有什么疑问?

欢迎留言与大家分享

猜你想看?

  • 学霸们在假期里“偷着学”,看的是这些书

  • 从图灵机、图灵测试到人工智能:什么决定了AI能否取代人类?

  • 从概念到应用,终于有人把数据挖掘讲明白了

  • 中国AI人才缺口500万,10本硬核技术书带你上车

更多精彩?

在公众号对话框输入以下关键词

查看更多优质内容!

PPT | 报告 | 读书 | 书单 | 干货 

大数据 | 揭秘 | Python | 可视化

AI | 人工智能 | 5G | 区块链

机器学习 | 深度学习 | 神经网络

合伙人 1024 | 段子 | 数学 | 高考

据统计,99%的大咖都完成了这个神操作

?

觉得不错,请把这篇文章分享给你的朋友

转载 / 投稿请联系:baiyu@hzbook.com

更多精彩,请在后台点击“历史文章”查看

点击阅读原文,了解更多

包教包会,7段代码带你玩转Python条件语句相关推荐

  1. 包教包会!7段代码带你玩转Python条件语句(附代码)

    来源:大数据 本文约5200字,建议阅读10分钟. 本文介绍了Python条件语句常用的7段代码. [ 导 读 ]条件语句通过一个或多个布尔表达式的执行结果(真值或假值)决定下一步的执行方向.所谓布尔 ...

  2. sybase不支持的条件表达式_包教包会!7段代码带你玩转Python条件语句(附代码)...

    来源:大数据 本文约5200字,建议阅读10分钟. 本文介绍了Python条件语句常用的7段代码. [ 导 读 ]条件语句通过一个或多个布尔表达式的执行结果(真值或假值)决定下一步的执行方向.所谓布尔 ...

  3. 18段代码带你玩转18个机器学习必备交互工具

    (图片有AI科技大本营付费下载自视觉中国) 作者 | 曼纽尔·阿米纳特吉(Manuel Amunategui).迈赫迪·洛佩伊(Mehdi Roopaei) 来源 | 大数据(ID:hzdashuju ...

  4. 18 段代码带你玩转 18 个机器学习必备交互工具

    加密货币 作者:曼纽尔·阿米纳特吉(Manuel Amunategui).迈赫迪·洛佩伊(Mehdi Roopaei) 如需转载请联系大数据(ID:hzdashuju) 01 Jupyter Note ...

  5. 视频教程-迈向数据科学家:带你玩转Python数据分析-Python

    迈向数据科学家:带你玩转Python数据分析 苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员:已出版<跟老齐学Python:轻松入门><跟老齐学Python ...

  6. python 条件语句实例_详解python 条件语句和while循环的实例代码

    详解python 条件语句和while循环的实例代码,逻辑,布尔,值为,结束,语句 详解python 条件语句和while循环的实例代码 易采站长站,站长之家为您整理了详解python 条件语句和wh ...

  7. 他在 B 站有 178 万粉丝,今天免费带你玩转 Python

    近几年,编程越来越火,网上也是铺天盖地的免费教程,中小学生都开始投入到学习中,编程学习从娃娃抓起. 甚至有些小学生都做起了 UP 主,教大家学编程. 光从编程的难易度来说,Python 简单& ...

  8. python不运行一段代码_Python:当满足某个条件而不使用“if”语句时跳过一段代码(计算)...

    我有一小段代码,我正试图以更好的方式编写,因为这段代码有很多"if"语句.这是一些大项目的小代码.问题是:在代码运行时,函数"f"."g"或 ...

  9. python条件语句代码例子_Python 炫技操作:条件语句的七种写法

    原标题:Python 炫技操作:条件语句的七种写法 作者 | 写代码的明哥 责编 | 郭芮 有的人说 Python 入门容易,但是精通难的语言,这点我非常赞同. Python 语言里有许多(而且是越来 ...

最新文章

  1. 002_生活口语积累
  2. 关于学习Python的一点学习总结(23->跳出循环)
  3. Java Spring Data Redis实战与配置参数详解 application.properties...
  4. TestNG或JUnit
  5. Python寻找给定序列中相差最小的两个数字
  6. 新建带自定义模板的office文件
  7. 营销单页程序php,Z-blogPHP单页网站模板|产品营销单页|单品推广
  8. 药品大数据公司都有哪些?
  9. Mac版 Adobe PS CC 2019 安装教程
  10. 【搞定GTD】当前的GTD状态测试
  11. TM4C123系列ARM单片机开发入门介绍
  12. mac系统,思科Cisco Anyconnect卸载之后,无法重新安装问题
  13. 外贸订单支付失败有哪些原因导致?有哪些解决方案?
  14. PDF如何修改,怎么裁剪页面
  15. 非amd解决No AMD graphics driver is installed
  16. Unity批量预设体替换材质球
  17. fabric链码安装失败
  18. rdkit 读写分子操作
  19. php+memcached缓存安装说明
  20. matlab匿名函数的基本使用

热门文章

  1. Redis工作笔记-Jedis的基本使用
  2. Qt工作笔记-QMenu::exec中使用QWidget::mapToGlobal()与QCursor::pos()之间的些许差异
  3. Qt|C++工作笔记-QVector与Vector去重复的值
  4. Ubuntu中apt与apt-get命令的区别
  5. 北京市计算机专修学院,北京计算机专修学院:三大热门专业
  6. python绘画梦想_用python实现你的绘画梦想
  7. python多线程爬虫框架_普通爬虫vs多线程爬虫vs框架爬虫,Python爬对比
  8. 2013年6月份安徽省计算机等级考试二级c语言答案,2013年计算机二级C语言上机试题九及答案...
  9. 自我理解的KMP 算法 模式匹配
  10. 操作系统之进程管理:14、读者-写者问题