金融商业数据分析:基于Python和SAS
上QQ阅读APP看书,第一时间看更新

3.5 Python的编程结构

程序控制是编程语言的基础。Python的编程结构有顺序结构、分支结构和循环结构。本节将对其做详细的讲解。

3.5.1 三种基本的编程结构简介

Python的编程结构包括顺序结构、分支结构和循环结构,如图3-8所示。

045-01

图3-8 Python的编程结构

  • 顺序结构的特点是依照次序执行代码,并返回相应的结果。这种结构较为简单,易于理解。
  • 分支结构的特点是有条件判断,即满足某种条件就继续执行,否则跳转到另外的条件上执行。
  • 循环结构程序用于处理可以迭代的对象,比如元组、列表。

在这些结构中,分支结构往往需要条件判断语句进行控制,比如if、else等,而循环结构需要循环语句for进行控制。当然,分支结构与循环结构完全可以混合,这时就可以通过条件循环语句while进行控制。

3.5.2 顺序结构

1. 顺序结构简介

现在创建一个列表:

>a = [1,2,3,4,5]

如果要打印列表中的所有元素,可以使用如下写法:

> print (a[0])
> print (a[1])
> print (a[2])
> print (a[3])
> print (a[4])
1
2
3
4
5

这种顺序执行的编程结构就是顺序结构。

2. 逻辑行与物理行

在Python中,代码被逐行提交给解释器并进行编译。物理行是指编辑器里看到的一行,逻辑行是指代码经过编译后所在的行。Python中,每个物理行对应着一个逻辑行。例如上述print代码的逻辑行和物理行是对应的。

但某些情况下,一个逻辑行的代码过长时,可以分拆为多个物理行,例如:

>tuple(set(list([1,2,3,4,5,6,7,8])))
(1, 2, 3, 4, 5, 6, 7, 8)

可以写成如下方式,

> tuple(set(list([1,2,3,\
    4,5,6,7,8])))
(1, 2, 3, 4, 5, 6, 7, 8)

符号“\”是换行的标识,此时代码是一个逻辑行,但有两个物理行。

当多个逻辑行代码过短时,如:

>x = 1
> y = 2
> z = 3
> print(x,y,z)
(1, 2, 3)

可以使用分号“;”将多个逻辑行转化为一个物理行:

> x = 1;y = 2;z = 3;print(x,y,z)
(1, 2, 3)

3.5.3 分支结构

分支结构的分支用于进行条件判断。在Python中,我们使用if、elif、else、冒号与缩进表达分支。以下是一个示例:

若数值x小于0,令x等于0,且打印信息Negative changed to zero;

若第一个条件不成立,判断x是否为0,若成立,打印Zero;

若第一、第二个条件不成立,再判断x是否为1,若成立,打印single;

若第一、第二、第三个条件都不成立,打印more。

我们将x赋初值-2,并测试以上逻辑的输出结果。

>x = -2
>if x < 0:
> x = 0
> print('Negative changed to zero')
>elif x == 0:
> print('Zero')
>elif x == 1:
> print('Single')
>else:
>     print('More')
'Negative changed to zero'

这里,if、elif、else组成的逻辑是一个完整的逻辑,即任何条件成立时,程序会停止后面的条件判断。这里需注意多个if语句存在时的条件判断结果:若把上述代码中的elif改为if,程序执行的结果会发生变化,如下所示:

> x = -2
>if x < 0:
>     x = 0
>     print('Negative changed to zero')
>if x == 0:
>     print('Zero')
>if x == 1:
>     print('Single')
>else:
>     print('More')
'Negative changed to zero'
'Zero'
'More'

上述程序的多个if语句是串行的关系,即上一个if语句的判断结果即使成立,下一个if语句也不会跳过,仍然会进行条件判断。所以,x=-2在第一个if语句处会被赋值为0并继续执行,在第二个if语句判断为真,第三个if语句判断为假时,再跳到else语句。

3.5.4 循环结构

这里介绍Python中的for循环结构和while循环结构。循环语句用于遍历可迭代对象的所有取值或元素,每一个被遍历到的取值或元素执行指定的程序并输出。这里,可迭代对象指可以被遍历的对象,比如列表、元组、字典等。

1. for循环

下面是一个for循环例子,i指代可迭代对象a中的一个元素。for循环条件以冒号结束,并换行缩进。第二行是每次循环执行的语句,这里是打印列表a中的每一个元素。

> a = [1,2,3,4,5]
> for i in a:
> print(i)
1
2
3
4
5

上述操作也可以通过遍历可迭代对象的索引来完成。列表a一共有5个元素,range(len(a))表示生成列表a的索引序列,这里打印索引并打印向量a索引下的取值。

> a = ['Mary', 'had', 'a', 'little', 'lamb']
> for i in range(len(a)):
>    print(i, a[i])
(0, 'Mary')
(1, 'had')
(2, 'a')
(3, 'little')
(4, 'lamb')
2. while循环

while循环一般会设定一个终止条件,中间输出值会随着程序运行而发生变化。当输出满足条件时,循环终止。while循环可以通过条件制定循环次数,例如通过计数器来终止循环,如下所示。计数器count每循环一次自增1,当count为5时,while条件为假,终止循环。

>count = 1
>while count < 5:
>    count = count + 1
>    print(count)
2
3
4
5

下面是一个比较特殊的示例,演示如何按照指定条件循环而不考虑循环的次数,例如编写循环程序使x不断减少,当x小于0.0001时,终止循环,代码如下。

>x=10
>count = 0
>while True:
>    count = count + 1
>    x = x - 0.02*x
>    if x< 0.0001:
>        break
>print (x,count)
(9.973857171889038e-05, 570)

上例中,while循环代码中使用了break语句,表示满足条件时终止循环。此外,我们也可通过continue、pass对循环进行控制。continue表示继续进行循环,如下代码尝试使用continue和break语句打印10以内能够被3整除的整数。

1)使用continue语句,示例如下:

>count = 0
>while count < 10:
>    count = count + 1
>    if count % 3 == 0:
>        print(count)
>        continue
    3
    6
    9

2)使用break语句,示例如下:

>count = 0
>while count < 10:
>    count = count + 1
>if count % 3 == 0:
>        print(count)
>        break
    3

3)使用pass语句,示例如下:

>count = 0
>while count < 10:
>    count = count + 1
>    if count % 3 == 0:
>        pass
>else:
>        print(count)
    1
    2
    4
    5
    7
    8
    10
3. 表达式

在Python中,诸如列表、元组、集合、字典都是可迭代对象。Python为这些对象的遍历提供了更加简洁的写法。例如对列表对象x的遍历,且每个元素除以10:

>x = [1,2,3,4,5]
>[i/10 for i in x]
[0.1, 0.2, 0.3, 0.4, 0.5]

上述[i/10 for i in x]的写法称为列表表达式,这种写法比for循环更加简便。此外,对于元组对象、集合对象、字典对象,这种写法依旧适用,且最终会产生一个列表对象。

>x = (1,2,3,4,5)    #元组
>[i/10 for i in x]
[0.1, 0.2, 0.3, 0.4, 0.5]
>x = set((1,2,3,4,5))  #集合
>[i/10 for i in x]
[0.1, 0.2, 0.3, 0.4, 0.5]
>x = {'a':2,'b':2,'c':5}  #字典
>[i for i in x.keys()]
['a', 'c', 'b']
>[i for i in x.values()]
[1, 3, 2]