1.3 控制条件分支与循环调用
和其他程序设计语言一样,if…else条件分支语句和诸如for与while等的循环语句在Python项目开发时也是不可或缺的,由于Python不用“{}”来定义语句块,因此在条件分支和循环语句中,也得用缩进来表示语句块的逻辑层次结构。
可以这样说,结合前文提到的函数调用流程,再加上条件分支语句和循环语句,那么就能了解Python程序的大致结构,也就是说,学好这部分内容后,就能达到Python语言的入门标准了。
1.3.1 通过if…else控制程序的分支流程
Python的条件分支语句的语法如下,其中elif的含义是else if。
1 if 条件1: 2 满足条件1后执行的代码 3 elif 条件2 4 满足条件1后执行的代码 5 else 6 没有满足上述条件时执行的代码
下面通过一个判断闰年的PythonIfDemo.py范例程序来示范一下if条件分支语句的用法。
1 # !/usr/bin/env python 2 # coding=utf-8 3 4 # 判断闰年 5 year=2018 6 # year=2020 7 if (year%4 == 0) and (year%100 != 0): 8 print("%d是闰年" %year) 9 elif year%400 == 0: 10 print("%d是闰年" %year) 11 else: 12 print("%d不是闰年" %year)
判断闰年的方法之一是:年份能被4整除,但不能被100整除,如第7行所示;方法之二是,能被400整除,如第9行的第二个判断条件。即满足这两个方法之一的年份就是闰年,否则就不是。
由于程序中year被赋值为2018,因此输出结果是“2018不是闰年”。基于这个范例程序的运行结果,下面归纳一下使用if的要点。
(1)注意缩进,由于第7行、第9行和第11行属于同一逻辑层次,因此它们均没有缩进,而它们附属的第8行、第10行和第12行的代码均需要缩进。
(2)if,elif和else等描述条件的语句均需要用冒号结尾。
(3)可通过==来判断两个值是否相等,在第7行中还用到了and逻辑运算符(即逻辑“与”),表示两个条件均满足时,整个if条件判断的结果为True,此外,还可以用or来表示逻辑“或”,用not来表示逻辑“非”。
1.3.2 while循环与continue,break关键字
Python语言中的while循环语句和其他程序设计语言的while循环语句非常相似,它的主要结构如下。
while 条件 满足条件后执行的语句
在实际应用中,Python中的while一般会同if语句、break和continue关键字配合使用,其中continue表示结束本轮循环继续下一轮循环(并没有跳离当前循环体),break则表示跳离当前层的while循环体(即退出了break所在的循环体)。下面通过范例程序PythonWhileDemo.py来演示循环执行的效果。
1 # !/usr/bin/env python 2 # coding=utf-8 3 # 演示while的用法 4 5 number=1 6 while number < 10: 7 number += 1 8 if not number%2 == 0: # 不是双数时则跳过本轮循环 9 continue 10 else: 11 Print( number) # 输出双数2、4、6、8、10 12 # 以上输出2,4,6,8,10这些偶数 13 14 number=1 15 while True: # 条件是True表示一直执行 16 print(number) # 输出1到5 17 number=number+1 18 if number > 5: # 当i大于5时跳离循环体 19 break 20 # 以上输出1,2,3,4,5
在第6行的while条件判断表达式中,设置的条件是number小于10,表示满足这个条件才能执行第7行到第11行的while循环体内的程序语句。
从第8行到第11行的代码中,还嵌入了if…else语句,这部分代码的含义是:如果number是偶数,则执行第9行的continue跳出本轮循环,进入下一轮循环;否则就执行第11行的代码输出number变量的值。大家注意,while和if的附属语句都用缩进来表示程序逻辑的层次关系。
在第15行的while语句中,条件为True,表示一直会执行这个循环,但是在循环体内的第18行if语句判断number是否大于5,如果是,则执行第19行的break语句跳离整个while循环体。
1.3.3 通过for循环来遍历对象
Python中的for循环比较常见的用途是“遍历对象”,它的语法结构如下:
for 变量 in 对象: for循环体内的程序语句
和while一样,在for的实际应用中,也经常会和if、continue和break配合使用。下面通过PythonForDemo.py范例程序来演示for的用法。
1 # !/usr/bin/env python 2 # coding=utf-8 3 # 演示for的用法 4 5 languages=["Java", "Go", "C++", "Python", "C#"] 6 for tool in languages: 7 if tool == "C++": 8 continue # 不会输出C++ 9 if tool == "Python": 10 print("我正在学Python。") 11 break 12 print(tool) 13 # 输出了Java,Go,我正在学Python,没有输出C#
在第5行中,定义了名为languages的字符串类型的列表,在其中使用了描述若干程序设计语言名称的字符串。在第6行的for循环语句中,使用tool对象,通过in关键字来遍历languages列表。
在for循环体内的程序语句第7行和第8行中,通过if语句来判定,如果遍历到列表中C++元素,则执行continue结束本轮for循环,否则继续for循环的下一轮循环。第9行的if语句定义,如果遍历到列表的Python元素,则输出“我正在学Python。”,而后执行第11行的break语句退出当前for循环体。
本段范例程序的输出结果如第13行所说明的注释,由于第8行的continue语句,因此不会输出C++,另外由于遍历到列表中的Python元素时,会执行第11行的break语句退出当前的for循环体,因此不会输出C#。