![]() |
4.2 选择流程控制 |
选择流程控制是一种条件控制语句,它包含一个条件判断表达式(也简称为条件式或者条件判断式),如果条件判断表达式结果为真(True),就执行某个程序区块;如果条件判断表达式结果为假(True),就执行另一个程序区块。下面介绍Python语言中与选择流程控制相关的语句及其功能。
if...else条件语句是一个相当普遍且实用的语句,如果条件判断表达式成立(True,或用1表示),就执行if程序区块中的程序语句,如果条件判断表达式不成立(False,或用0表示),就执行else程序区块中的程序语句。如果有多重判断,可以加上elif指令。if条件语句的语法如下:
if 条件判断表达式: #如果条件判断表达式成立,就执行这个程序区块中的程序语句 else: #如果条件不成立,就执行这个程序区块中的程序语句
假如我们要判断a变量的值是否大于等于b变量的值,条件判断表达式可以这样编写:
if a >= b: #如果a大于等于b,就执行这个程序区块中的程序语句 else: #如果a“不”大于或等于b,就执行这个程序区块中的程序语句
if…else条件语句的流程示意图如图4-6所示。
图4-6
在if…else条件语句的使用上,如果条件不成立,就不需要执行任何程序语句,可以省略else部分:
if 条件判断表达式: #如果条件成立,就执行这个程序区块中的程序语句
另外,如果if…else条件语句使用and或or等逻辑运算符,那么建议加上括号区分执行顺序,以便提高程序的可读性,例如:
if (a==c) and (a>b): #如果a等于c而且a大于b,就执行这个程序区块中的程序语句 else: #如果上述条件不成立,就执行这个程序区块中的程序语句
另外,Python语言提供了一种更简洁的if...else条件表达式,格式如下:
X if C else Y
根据条件判断表达式返回两个表达式其中的一个,在上面的表达式中,当C为真时返回X,否则返回Y。例如,要判断整数X是奇数还是偶数,原来的程序会这样编写:
if (x % 2)==0: y="偶数" else: y="奇数" print('{0}'.format(y))
改成简洁的形式,就只需要简单的一行程序语句就能达到同样的目的,语句如下:
print('{0}'.format("偶数" if (X % 2)==0 else "奇数"))
如果if条件判断表达式为真,就返回“偶数”,否则返回“奇数”。
在下面的范例程序中,我们将练习if…else语句的用法。范例程序的目的是制作一个简易的闰年判断程序。让用户输入年份(4位数的整数year),程序判断是否为闰年。满足以下两个条件之一就是闰年:
(1)逢4年闰(可被4整除)但逢100年不闰(不可被100整除)。 (2)逢400年闰(可被400整除)。
【范例程序:leapYear.py】判断是否为闰年
01 # -*- coding: utf-8 -*- 02 """ 03 程序名称:闰年判断程序 04 题目要求: 05 输入年份(4位数的整数year)判断是否为闰年 06 条件1.逢4闰(可被4整除)而且逢100不闰(不可被100整除) 07 条件2.逢400闰(可被400整除) 08 满足两个条件之一就是闰年 09 """ 10 year = int(input("请输入年份:")) 11 12 if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0): 13 print("{0}是闰年".format(year)) 14 else : 15 print("{0}是平年".format(year))
程序的执行结果如图4-7所示。
图4-7
程序代码解析:
·第10行:输入一个年份,但记得调用int()函数将其转换成整数类型。
·第12~15行:判断是否为闰年,条件1:逢4闰(可被4整除)而且逢100不闰(不可被100整除),条件2:逢400闰(可被400整除),满足两个条件之一就是闰年。
请读者查询下列年份是否为闰年:
1900(平年)、1996(闰年)、2004(闰年)、2017(平年)、2400(闰年)
如果条件判断表达式不止一个,就可以再加上elif条件语句,elif就像是“else if”的缩写,虽然使用多重if条件语句可以解决各种条件下执行不同程序区块的问题,但是终究还是不够精简,这时elif条件语句就能派上用场了,还可以提高程序的可读性。注意,if语句是我们程序中逻辑上的“必需品”,后面并不一定要有elif和else,因而有if、if/else、if/elif/else三种情况。格式如下:
if 条件判断表达式1: #如果条件判断表达式1成立,就执行这个程序区块中的程序语句 elif 条件判断表达式2: #如果条件判断表达式2成立,就执行这个程序区块中的程序语句 else: #如果上面的条件都不成立,就执行这个程序区块中的程序语句
例如:
if a==b: #如果a等于b,就执行这个程序区块中的程序语句 elif a>b: #如果a大于b,就执行这个程序区块中的程序语句 else: #如果a不等于b而且a小于b,就执行这个程序区块中的程序语句
下面通过范例程序来练习if多重选择的用法。范例程序的目的是检测当前的时间来决定使用哪一种问候语。
【范例程序:currentTime.py】检测当前时间来决定使用哪一种问候语
01 # -*- coding: utf-8 -*- 02 """ 03 程序名称:检测当前时间来决定使用哪一种问候语 04 题目要求: 05 根据当前时间判断(24小时制) 06 5~10:59,输出“早安” 07 11~17:59,输出“午安” 08 18~4:59,输出“晚安” 09 """ 10 11 import time 12 13 print ("现在时间:{}".format( time.strftime("%H:%M:%S"))) 14 h = int( time.strftime("%H") ) 15 16 if h>5 and h < 11: 17 print ("早安!") 18 elif h >= 11 and h<18: 19 print ("午安!") 20 else: 21 print ("晚安!")
程序的执行结果如图4-8所示。
图4-8
范例程序中获取当前的时间来判断早上、下午或晚上,而后显示适当的问候语。Python的time模块提供了各种与时间有关的函数,time模块是Python标准模块库中的模块,使用前要先使用import指令导入,再调用strftime函数将时间格式化为我们想要的格式,例如下面的程序语句用于获取当前的时间。
import time time.strftime("%H:%M:%S") # 18:36:16 (24小时制 下午6:36:16) time.strftime("%I:%M:%S") # 06:36:16 (12小时制 下午6:36:16)
括号内是要设置的格式参数,常用的参数可参考表4-1。
表4-1
注意格式符号的大小写。下面的程序语句用于显示星期、月、日以及时、分、秒。
import time print(time.strftime("%A, %b %d %H:%M:%S"))
执行结果如下:
Monday, Sep 17 15:49:29
有时在if条件语句中又有另一层if条件语句,这种多层的选择结构称为嵌套(nested)if条件语句。通常在示范嵌套if条件语句的使用方式时,比较常见的做法是以数字范围或成绩来演示多重选择。也就是说,不同的成绩会有不同等级的合格证书。如果是60分以上,就给第一张合格证书,如果是70分以上,就再给第二张合格证书,如果是80分以上,就再给第三张合格证书,如果是90分以上,就再给第四张合格证书,如果100分以上,就再给全能专业的合格证书。根据嵌套if语句,我们可以编写如下程序:
getScore= int(input("请输入分数:")) if getScore >= 60: print('第一张合格证书') if getScore >= 70 : print('第二张合格证书') if getScore >= 80 : print('第三张合格证书') if getScore >= 90 : print('第四张合格证书') if getScore == 100 : print('全能专业的合格证书')
其实这种一层一层往下探索的if语句,我们可以使用if/elif语句将这种多重选择按条件表达式运算逐一过滤,选择符合的条件(True)来执行某个程序区块内的程序语句,语法如下:
if 条件表达式1: 符合条件表达式1要执行的程序区块 elif 条件表达式2: 符合条件表达式2要执行的程序区块 elif 条件表达式N: 符合条件表达式N要执行的程序区块 else: 如果所有条件表达式都不符合,就执行此程序区块
当条件表达式1不符合时,向下寻找到最终符合的条件表达式为止。其中elif指令是else if的缩写。elif语句可以根据条件表达式的运算来产生多条语句,它的条件表达式之后也要有冒号,表示下面是符合此条件表达式的程序区块,要进行缩排。
下面的范例程序是一种典型的嵌套if和if/elif语句的综合使用例子,这个程序使用if判断所查询的成绩属于哪一个等级。除此之外,范例程序中还加入了另一个判断,如果所输入的分数整数值没有介于0到100之间,就会输出“输入错误,所输入的数字必须介于0-100间”的提示信息。
【范例程序:nested_if.py】嵌套if语句的综合使用范例
01 # -*- coding: utf-8 -*- 02 """ 03 嵌套if语句的综合使用范例 04 """ 05 score = int(input('请输入期末总成绩:')) 06 07 # 第一层 if/else 语句:判断所输入的成绩是否介于0到100之间 08 if score >= 0 and score <= 100: 09 # 第二层 if/elif/else 语句 10 if score <60: 11 print('{0} 分以下无法取得合格证书'.format(score)) 12 elif score >= 60 and score <70: 13 print('{0} 分的成绩等级是D级'.format(score)) 14 elif score >= 70 and score <80: 15 print('{0} 分的成绩等级是C级'.format(score)) 16 elif score >= 80 and score <90: 17 print('{0} 分的成绩等级是B级'.format(score)) 18 else: 19 print('{0} 分的成绩等级是A级'.format(score)) 20 else: 21 print('输入错误, 所输入的数字必须介于0-100间')
程序的执行结果如图4-9所示。
图4-9
程序代码解析:
·第7~21行:第一层if/else语句,用于判断所输入的成绩是否介于0到100之间。
·第10~19行:第二层if/elif/else语句,用于判断所查询的成绩属于哪一个等级。