第3章程序流程控制
视频讲解
在Python程序中,对于语句的执行有三种基本的控制结构,即顺序结构、选择结构、循环结构。另外,当程序出错时,Python使用异常处理流程进行处理。
3.1程序的流程
3.1.1输入、处理和输出(IPO)
无论程序的规模如何,每个程序都可以分为以下三个部分: 程序通过输入接收待处理的数据(input)); 执行相应的处理(process); 通过输出(output)返回处理的结果。该过程通常称为IPO程序编写方法。其示意图如图31所示。
图31程序的输入、处理和输出示意图
(1) 输入数据。
输入是一个程序的开始。程序要处理的数据有多种来源,形成了多种输入方式,包括交互输入、参数输入、随机数据输入、文件输入、网络输入等。
(2) 处理数据。
处理是程序对输入数据进行计算产生输出结果的过程。计算问题的处理方法统称为“算法”。
(3) 输出结果。
输出是程序输出结果的方式。程序的输出方式包括控制台输出、图形输出、文件输出、网络输出等。
【例3.1】计算球体的表面积和体积的程序的IPO描述。
输入(I): 输入r(球体的半径)
处理(P): 计算球体的表面积s = 4 * math.pi * r * r
计算球体的体积v = 4 * math.pi * r * r * r / 3
输出(O): 输出s和v
3.1.2算法和数据结构
程序还可以使用以下公式描述:
程序 = 算法 + 数据结构
算法是执行特定任务的方法。数据结构是一种存储数据的方式,有助于求解特定的问题。算法通常与数据结构紧密相关。算法可以描述为: “建立一个特定的数据结构,然后采用某种方式使用该数据结构”。
描述算法的最简单方法是使用自然语言描述。对于较复杂的算法,为了描述其细节,往往采用伪代码进行描述。伪代码是一种类似于程序设计语言的文本,其目的是为读者提供在代码中实现算法所需的结构和细节,而无须将算法局限于特定的程序设计语言。 【例3.2】求解两个整数优选公约数的算法的自然语言描述。
求解两个整数的优选公约数(Great Common Divisor,GCD)的一种算法是辗转相除法,又称欧几里得算法。辗转相除法算法的自然语言描述如下。
(1) 对于已知的两个正整数m和n,使得m>n。
(2) m除以n得到余数r。
(3) 若r≠0,则令m←n,n←r,重复步骤(2),继续m除以n得到新的余数r。若仍然r≠0,则重复此过程,直到r=0为止。最后的m就是优选公约数。
【例3.3】求解两个整数优选公约数的辗转相除算法的伪代码描述。
//求解m和n的优选公约数。GCD(m, n) = GCD(n, m Mod n).
GCD(m, n)
While (n != 0)
remainder = m Mod n //计算余数
m = n
n = remainder
End While
Return m
End Gcd
伪代码没有特定对应的语言规则。本书采用本例中类似Python缩进规则的伪代码描述。
【例3.4】求解两个整数的优选公约数的辗转相除算法的Python代码实现(gcd.py)。
#求解m和n的优选公约数。GCD(m, n) = GCD(n, m Mod n)
def gcd(m,n):
if (m < n):
m, n = n, m
while (n != 0):
remainder = m % n#计算余数
m = n
n = remainder
return m
if __name__ == '__main__':
print(24,36,"的优选公约数为: ",gcd(24,36))
程序运行结果如下:
24 36的优选公约数为: 12
3.1.3程序流程图
程序流程图(flow chart)又称为程序框图,是描述程序运行具体步骤的图形表示。通过标准符号详细描述程序的输入、处理和输出过程,可以作为程序设计的最基本依据。
流程图的基本元素主要包括以下几种。数所得等级评定结果只有“及格”和“不及格”两种,请读者根据程序流程自行分析原因。
【例3.10】已知坐标点(x,y),判断其所在的象限(if_coordinate.py)。
x = int(input("请输入x坐标: "))
y = int(input("请输入y坐标: "))
if (x == 0 and y == 0): print("位于原点")
elif (x == 0): print("位于y轴")
elif (y == 0): print("位于x轴")
elif (x > 0 and y > 0): print("位于第一象限")
elif (x < 0 and y > 0): print("位于第二象限")
elif (x < 0 and y < 0): print("位于第三象限")
else: print("位于第四象限")
程序运行结果如下:
请输入x坐标: 1
请输入y坐标: 2
位于第一象限
3.3.8if语句的嵌套
在if语句中又包含一个或多个if语句称为if语句的嵌套。一般形式如下:
if (条件表达式1):
if (条件表达式11):
语句1
[else:
语句2]内嵌if
[else:
if (条件表达式21):
语句3
[else:
语句4]]内嵌if
【例3.11】计算分段函数: y=1x>0
0x=0
-1x<0
此分段函数有以下几种实现方式,请读者判断哪些是正确