程序的控制结构

程序流程图

程序流程图是一种表达程序控制结构的方式,主要用于关键部分的程序分析和过程描述,由系列图形、流程线和文字说明等组成。

流程图包括7种基本元素

起止框:表示程序逻辑的开始或结束

判断框:表示一个判断条件,并根据判断结果选择不同的执行路径

处理框:表示一组处理过程,对应于顺序执行的程序逻辑

输入/输出框:表示程序中的数据输入或结果输出

注释框:表示程序的注释

流向线:表示程序的控制流,以带箭头直线或曲线表达程序的执行路径

连接点:表示多个流程图的连接方式,常用于将多个较小流程图组织成较大流程图

程序的控制结构基础

程序由3种基本结构组成:顺序结构、分支结构和循环结构。任何程序都由这3种基本结构组合而成。

顺序结构是程序按照线性顺序依次执行的一种运行方式

分支结构是程序根据条件判断结果而选择不同向前执行路径的一种运行方式。

最基础的分支结构是二分支结构,即判断条件产生“是”或“否”的结果,并根据这个结构选择不同路径。二分支结构会组合形成多分支结构。

循环结构是程序根据条件判断结果向后执行的一种运行方式。

由于向后执行形成了对已执行代码的反复执行效果,因此,这种逻辑被称为循环。

程序的控制结构扩展

在3种基本控制逻辑基础上, Python语言进行了必要且适当的扩展。

在分支结构原理的基础上, Python增加了异常处理,使用try-except保留字

异常处理以程序是否异常为判断条件,根据一段代码执行的正确性进行程序逻辑选择。

异常处理是分支结构的一种扩展。

在循环结构原理的基础上, Python提供两个循环控制符 breakcontinue, 对循环的执行过程进行控制。break控制符用来结束当前循环, continue控制符用来结束当前循环的当次循环过程

程序的分支结构

单分支结构

Python的单分支结构使用if保留字对条件进行判断

1
2
if<条件>:
<语句块>

<语句块>是if条件满足后执行的一个或多个语句序列, 缩进表达<语句块>与if的包含关系。

<条件>是一个产生TrueFalse结果的语句, 当结果为True时, 执行<语句块>, 否则跳过<语句块>。

1
2
3
4
5
# ~ 判断奇偶性
s = eval(input("请输入一个整数:"))
if s%2 == 0:
print("{}是偶数".format(s))
print("输入的数是",s)

二分支结构

Python的二分支结构使用if-else保留字对条件进行判断

1
2
3
4
if<条件>:
<语句块1>
else:
<语句块2>

<语句块1>在证中<条件>满足即为True时执行, <语句块2>在if中<条件>不满足即为False时执行。

简单说,二分支结构根据条件的TrueFalse结果产生两条路径。

1
2
3
4
5
6
# ~ 判断数是否同时能被3和5整除
s = eval(input("请输入一个整数:"))
if s%3==0 and s%5==0:
print("可以同时被3和5整除")
else:
print("不可以同时被3和5整除")

二分支结构还有一种更紧凑的表达方式, 适合<语句块1>和<语句块2>都只包含简单表达式的情况

1
<表达式1> if <条件> else <表达式2>
1
2
3
4
# ~ 判断数是否同时能被3和5整除
s = eval(input("请输入一个整数:"))
num = "" if s%3==0 and s%5==0 else "不"
print("{}{}能同时被3和5整除".format(s,num))

多分支结构

Python的多分支结构使用if-elif-else保留字对多个相关条件进行判断, 并根据不同条件的果按照顺序选择执行路径

1
2
3
4
5
6
if<条件1>:
<语句块1>
elif<条件2>:
<语句块2>
else:
<语句块N>

多分支结构通常用于判断同一个条件或一类条件的多个执行路径。

要注意, Python会按照多分支结构的代码顺序依次评估判断条件, 寻找并执行第一个结果为True条件对应的语句块, 当前语句块执行后跳过整个if-elif-else结构。

如果没有任何条件成立, else下面的语句块被执行。else子句是可选的。利用多分支结构编写代码时要注意多个逻辑条件的先后关系。

1
2
3
4
5
6
7
8
9
10
11
12
13
#输入百分制成绩进行评分
score = eval(input("请输入一个百分制成绩:"))
if score>= 90:
mark = "A"
elif score>=80:
mark = "B"
elif score>=70:
mark = "C"
elif score>=60:
mark = "D"
else:
mark = "E"
print("{}的评分是{}".format(score,mark))

程序的循环结构

Python语言的循环结构包括两种:遍历循环和无限循环。

遍历循环

Python通过保留字for实现遍历循环

1
2
for <循环变量> in <遍历结构>:
<语句块>

遍历循环可以理解为从遍历结构中逐一提取元素, 放在循环变量中, 对于每个所提取的元素执行一次语句块。

for语句的循环执行次数是根据遍历结构中元素个数确定的。

遍历结构可以是字符串、文件、 range()函数或组合数据类型等。

1
2
3
4
5
for s in "Hello":
print(s,end=" ") #H e l l o
print("\n")
for c in range(5):
print(c,end=" ") #0 1 2 3 4

遍历循环还有一种扩展模式

1
2
3
4
for <循环变量> in <遍历结构>:
<语句块1>
else:
<语句块2>

当for循环正常执行之后,程序会继续执行else语句中内容。

else语句只在循环正常执行没有被 break打断才执行, 因此, 可以在<语句块2>中放置判断循环执行情况的语句。

1
2
3
4
for s in "Hello":
print("循环ing:",s)
else:
print("循环结束!")

无限循环

Python通过保留字 while实现无限循环

1
2
while <条件>:
<语句块>

当程序执行到 while语句时, 判断条件如果为True, 执行循环体语句, 循环体语句结束后返回再次判断 while语句的条件;

当条件为 False时, 循环终止, 执行与 while同级别缩进的后续语句。

1
2
3
4
n = 0
while n<10:
print(n)
n += 3

无限循环也有一种使用保留字else的扩展模式

1
2
3
4
while <条件>:
<语句块>
else:
<语句块2>

在这种扩展模式中, 当 while循环正常执行之后, 程序会继续执行else语句中内容。

else语句只在循环正常执行后才执行, 因此, 可以在语句块2中放置判断循环执行情况的语句。

while循环的else语句与for循环的else语句一样, 都是循环正常执行结束的“奖励”部分。

1
2
3
4
5
6
s,index = "Hello",0
while index<len(s):
print("循环ing:",s[index])
index += 1
else:
print("循环结束")

循环控制

循环结构有两个辅助循环控制的保留字: breakcontinue

break用来跳出最内层forwhile循环 , 脱离该循环后程序继续执行循环后续代码。

如果有2层或多层循环, break退出最内层循环。

1
2
3
4
5
6
while True:
s = input("请输入数字(按Q/q退出):")
if s == "Q" or s == "q":
break
print("输入的数字是",s)
print("退出")

continue用来结束当前当次循环, 即跳出循环体中下面尚未执行的语句, 但不跳出当前循环。

1
2
3
4
for s in "hello":
if s == "e":
continue
print(s,end="") #hllo

程序的异常处理

基本异常处理

Python程序一般对输入有一定要求, 但当实际输入不满足程序要求时, 可能会产生程序的运行错误。

Python语言使用保留字tryexcept进行异常处理

1
2
3
4
try:
<语句块1>
except:
<语句块2>

语句块1是正常执行的程序内容, 当执行这个语句块发生异常时, 则执行 except保留字后面的语句块2。

1
2
3
4
5
try:
n = eval(input("请输入一个数字:"))
print("{}的3次方是{}".format(n,n**3))
except:
print("错误!请输入数字")

特殊异常处理

仔细观察 Python程序的异常错误信息, 最后一行给出了异常提示,其中包含了对异常处理类型的描述,比如 NameErrorZeroDivisionError。这些异常处理类型由 Python语言定义。

1
2
3
4
try:
<语句块1>
except <异常处理类型>:
<语句块2>
1
2
3
4
5
6
7
try:
for i in range(5):
print(10/i,end=" ")
except ZeroDivisionError:
print("除数为零,错误!")
except:
print("错误!")

Python实例

猜数字游戏
编写一个“猜数字游戏”的程序, 在1-1000之间随机产生一个数, 然后请用户循环猜这个数字, 对于每个答案只回答“猜大了”或“猜小了”,直到猜对为止, 输出用户的猜测次数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# ~ 猜数字游戏
import random
# ~ random.randint()用于生成一个指定范围内的整数
num = random.randint(1,100)
count = 0
while True:
try:
guess = eval(input("请输入一个猜测的整数(1-100):"))
if guess>100 or guess<1:
print("输入范围错误,请重新输入(不计入次数)")
continue
elif type(guess) != type(1):
print("输入类型错误,请重新输入(不计入次数)")
continue
except:
print("输入类型有误,请重新输入(不计入次数)")
continue
count += 1
if guess>num:
print("猜大了")
elif guess<num:
print("猜小了")
else:
print("猜对了!")
break
print("数字为{},猜测次数{}次".format(num,count))