基于股票大数据分析的Python入门实战(视频教学版)
上QQ阅读APP看书,第一时间看更新

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#。