购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.2 选择流程控制

选择流程控制是一种条件控制语句,它包含一个条件判断表达式(也简称为条件式或者条件判断式),如果条件判断表达式结果为真(True),就执行某个程序区块;如果条件判断表达式结果为假(True),就执行另一个程序区块。下面介绍Python语言中与选择流程控制相关的语句及其功能。

4.2.1 if...else条件语句

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(闰年)

4.2.2 多重选择

如果条件判断表达式不止一个,就可以再加上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

4.2.3 嵌套if

有时在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语句,用于判断所查询的成绩属于哪一个等级。 QKRPxlhsocEWXrHR1AZKFJA7lcrv2WeaxI4MpZQdMTIIeXxfTdsCe8HoG6vXgZHY

点击中间区域
呼出菜单
上一章
目录
下一章
×