
3.5 Python的编程结构
程序控制是编程语言的基础。Python的编程结构有顺序结构、分支结构和循环结构。本节将对其做详细的讲解。
3.5.1 三种基本的编程结构简介
Python的编程结构包括顺序结构、分支结构和循环结构,如图3-8所示。

图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]