第 4 章 程序的控制结构

整理的文章内容主要来源为高教版《计算机等级考试二级 Python》教程视频讲义,并且更正了原讲义中的错误的地方。
专栏文章索引如下:
考试大纲
第 1 章 程序设计基本方法
第 2 章 Python 语言基本语法元素
第 3 章 基本数据类型
第 4 章 程序的控制结构
第 5 章 函数和代码复用
第 6 章 组合数据类型
第 7 章 文件和数据格式化
第 8 章 Python 计算生态
第 9 章 Python 标准库概览
第 10 章 Python 第三方库使用
第 11 章 Python 第三方库纵览

1. 程序的三种控制结构

1.1 程序流程图

程序流程图是一种表达程序控制结构的方式,主要用于关键部分的程序分析过程描述,由一系列图形、流程线和文字说明等组成。
流程图的 7 种基本元素如下所示:
在这里插入图片描述
描述一个计算问题的程序过程有多种方式,包括:IPO、流程图、伪代码和程序代码。其中,流程图采用图形方式最为直观。

1.2 程序控制结构基础

程序的 3 种基本结构:
在这里插入图片描述
顺序结构、分支结构、循环结构是 3 种最基本的控制结构,任何编程语言都提供这 3 种基本的控制逻辑,并进行了适当扩展。

1.3 程序控制结构扩展

Python 在原有的分支结构的基础上,扩展了异常处理,使用了 try…except 语句。异常处理以程序是否产生异常为判断条件,根据一段代码执行的正常性进行程序逻辑选择。
在这里插入图片描述
在循环原理的基础上,Python 提供了两个循环控制符 break 和 continue,对循环的执行过程进行控制。break 控制符用来结束当前循环,continue 控制符用来结束当前循环的当此循环过程。

2. 程序的分支结构

2.1 单分支结构:if

单分支结构的语法:

if 条件:
	语句块

在这里插入图片描述
条件是一个产生 True 或 Flase 结果的语句,当结果为 True 时,执行语句块,否则跳过语句块。缩进的语句块与 if 是包含关系(语句块可以是一条语句,也可以是多条语句)。

# 判断用户输入的数字的奇偶性
s = eval(input('请输入一个数字:'))
if s%2 == 0:
	print('输入的数字是偶数')
print('输入的数字是:',s)

如果条件是多个,多个条件间采用 and 或 or 进行逻辑组合,and 表示多个条件”与”的关系,or表示多个条件”或”的关系。

# 判断用户输入的数字特点
s = eval(input('请输入一个数字:'))
if s%3 == 0 and s%5 == 0:
	print('输入的数字既能被3整除法又能被5整除')
print('输入的数字是:',s)

2.2 双分支结构:if-else

Python 中的双分支结构使用 if-else 对条件进行判断,其中 if-else 和语句块前的缩进都是语法的一部分。语句块 1 在 if 中条件为 True 时执行,语句块 2 在 if 条件为 Flase 时执行。简单地说双分支结构根据条件的 True 或 False 结果产生两条路径。

if 条件:
	语句块 1
else:
	语句块 2

在这里插入图片描述

# 判断用户输入的数字的奇偶性
s = eval(input('请输入一个数字:'))
if s%2 == 0:
	print('输入的数字是偶数')
else:
	print('输入的数字是偶数')

双分支结构还有一种简洁的表达方式,简称条件表达式。对于简洁表达式,要使用表达式而不是语句。
语法结构:

表达式 1 if 条件 else 表达式 2
s = eval(input('请输入一个数字:'))
result = '' if s%3 == 0 and s%5 == 0 else '不'
print('这个数字{}能够同时被3和5整除'.format(result))

表达式和语句的区别:
表达式是产生或计算新数据值的代码片段,它并不是完整语句。例如 1+2 是表达式,s = 1+2 则是语句。

2.3 多分支结构:if-elif-else

Python 的多分支结构是一种多选一执行的结构,根据不同条件的结果按照顺序选择执行路径。Python 的多分支结构通常用于判断同一个条件或一类条件的多个执行路径,Python 会按照代码顺序依次评估判断条件,寻找并执行第一个结果为 True 条件对应的语句块,当前语句块执行后会跳过整个 if-elif-else 结构。如果没有任何条件成立,else 下面的语句块被执行,else 子句是可选的。

if 条件 1:
	语句块 1
elif 条件 2:
	语句块2
...
else:
	语句块 N

在这里插入图片描述
利用多分支结构编写代码时要注意多个逻辑条件的先后关系。比如下面的代码,就存在明显的逻辑错误。

# 将百分制成绩转换为五分制
score = eval(input('请输入一个百分制成绩:'))
if score >= 60:
	print('D')
elif score >= 70:
	print('C')
elif score >= 80:
	print('B')
elif score >= 90:
	print('A')
else:
	print('E')

如果输入的成绩为 90, 那么输出应该为 D. 但是,显然百分制 90分不应该是 D,原因就是因为没有理清多个逻辑条件之间的关系。
更改如下:

# 将百分制成绩转换为五分制
score = eval(input('请输入一个百分制成绩:'))
if score >= 90:
	print('A')
elif score >= 80:
	print('B')
elif score >= 70:
	print('C')
elif score >= 60:
	print('D')
else:
	print('E')

2.4 判断条件及组合

分支结构中的判断条件可以使用任何能够产生 True 或 False 的语句或函数。形成判断条件最常见的方式是采用关系操作符。

操作符操作符含义
<小于
<=小于等于
>大于
>=大于等于
==等于
!=不等于
在这里插入图片描述
在 Python 语言中,任何非零的数值,非空的数据类型的布尔值为 True, 0 或空类型的布尔值为False.
Python 语言中使用 not, not 和 or 对条件进行逻辑运算或组合。
not 表示单个条件的“否”关系。
and 表示多个条件之间的“与”关系。
or 表示多个条件之间的“或”关系。
多个条件之间可以通过小括号进行组合,实现条件之间的运算。

3. 程序的循环结构

Python 语言的循环结构包括两种:遍历循环和无限循环。遍历循环使用保留字 for 依次提取遍历结构各元素进行处理:无限循环使用保留字 while 根据判断条件执行程序。

3.1 遍历循环:for

for 循环的语法结构:

for 循环变量 in 遍历结构:
	语句块

在这里插入图片描述
遍历循环结构可以理解为从遍历结构中逐一提取元素,放在循环变量中,对于每个所提取的元素执行一次语句块。for 语句的循环执行次数是根据遍历结构中元素个数确定的。遍历结构可以是字符串、文件、range() 函数或组合数据类型等。
遍历字符串:

for 循环变量 in 字符串变量:
		语句块
for i in 'Python':
	print(i)

使用 range() 函数,可以指定语句块的循环次数。

for 循环变量 in range(循环次数):
	语句块

遍历循环还有一种扩展模式,for-else 结构。当 for 循环正常执行之后,程序会继续执行 else 语句中内容。else 语句只在循环正常执行之后才执行结束。
可以把循环中的 else 语句想象成一种奖励,当程序辛苦地执行完全部循环,没有中途 break 终止,则额外给予了一段程序执行的奖励。

for i in 'Python':
	print(i)
else:
	print('循环正常结束')

3.2 无限循环:while

Python 通过保留字 while 实现无限循环。
while 语法结构:

while 条件:
	语句块

在这里插入图片描述
条件与 if 语句中的判断条件一样,结果为 True 和 False.
当程序执行到 while 语句时,判断条件如果为 True, 执行循环体语句,语句结束后返回再次判断 while 语句的条件,当条件为 False 时,循环终止,执行与 while 同级别缩进的后续语句。
无限循环也有一种 else 的扩展模式:

while 条件:
	语句块1
else:
	语句块2

当 while 循环正常结束之后,程序会继续执行 else 语句中内容。else 语句只在循环正常执行后才执行。

i = 0 
while i < 5:
	print(i)
	i = i + 1
else:
	print('循环结束')

3.3 循环控制:break 和 continue

循环结构有两个辅助循环控制的保留字:break 和 continue.
break 用于跳出最内层 for 或 while 循环,脱离该循环后程序继续执行循环后续代码。

i = 0 
while i < 5:
	print(i)
	i = i + 1
	if i == 3break

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

i = 0 
while i < 5:
	print(i)
	i = i + 1
	if i == 3continue

continue 和 break 语句的区别是:continue 语句只结束本次循环,不终止整个循环的运行,而 break 具备结束整个当前循环的能力。
在 while 或 for 循环语句中使用了 break 退出循环,那么 else 语句将不再执行。

i = 0 
while i < 5:
	print(i)
	i = i + 1
	if i == 3break
else:
	print('退出循环')

3.4 程序的异常处理

Python 程序一般对输入有一定要求,但当实际输入不满足程序要求时,可能会产生程序的运行错误。
在这里插入图片描述
由于使用了 eval() 函数,如果用户输入的不是一个数字则可能报错。这类由于输入与预期不匹配造成的错误有很多种可能性,不能逐一列出所有可能性进行判断。为了保证程序运行的稳定性,这类运行错误应该被程序捕获并合理控制。
在 Python 中使用 try-expect 进行异常处理。
语法格式:

try:
	语句块 1
except:
	语句块 2

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

try:
	n = eval(input('请输入一个数字:'))
	print('输入的数字是',n)
except:
	print('输入有误')

除了输入之外,异常处理还可以处理程序执行中的运行异常。

print(5/0)

上述代码段中产生了除以 0 的情况,Python 语言不支持除数为 0 的操作,会产生了ZeroDivisionError 的运行错误,可以使用 try-except 方式处理这样的异常情况。

try:
	print(5/0)
except:
	print('除数不能为0')

程序也可以结合特定的错误类型进行处理。在 except 后指明错误类型,对于除零错误,可以在 except 后面增加 ZeroDivisionError,仅指定处理该类型错误,再增加 except 处理其余错误。

try:
	print(5/0)
except ZeroDivisionError:
	print('除数不能为0')
except:
	print('其他错误')

只要程序可能异常退出,无论哪种类型,都可以用 try-except 捕获这种异常,使程序有更好的用户体验。

4. 选择题

(1)以下语句在 Python 中非法的是(B)

  • A. x=y=z=1
  • B. x=(y=z+1)
  • C. x,y=y,x
  • D. x+=y

(2)以下选项运行结果为 True 的是(A)

  • A. (‘3’,’2’) < (‘a’,’b’)
  • B. 5 + 4j > 2-3j
  • C.‘abc’ > ’xyz’
  • D. 3 > 2 > 2

(3)以下选项符合 Python 语法要求且能够正确执行的是(D)

  • A. min=x if x<y=y
  • B. max=x>y?x:y
  • C. if (x>y) print x
  • D. while True: pass

(4)以下选项用来判断当前程序在分支结构中的是(C)

  • A. 括号
  • B. 冒号
  • C. 缩进
  • D. 花括号

(5)以下选项不能进行条件逻辑操作的是(D)

  • A. and
  • B. or
  • C. not
  • D. xor

(6)对负数取平方根,即使用函数 pow(-1,0.5),将产生(A)

  • A. 虚数
  • B. 程序崩溃
  • C. 什么都不产生
  • D. ValueError 错误

(7)for 或者 while 与 else 搭配使用时,能够执行 else 对应语句块的情况是(C)

  • A. 总会执行
  • B. 永不执行
  • C. 仅循环正常结束时
  • D. 仅循环非正常结束时,以 break 结束

(8)try-except 结构中,能够执行 except 对应语句块的情况是(A)

  • A. try 中语句出现异常时
  • B. 正常程序结束后
  • C. try 中语句有分支时
  • D. try 中语句有循环时

(9)关于 break 的作用,以下说法正确的是(C)

  • A. 按照缩进跳出当前层语句块
  • B. 按照缩进跳出函数缩进外的所有语句块
  • C. 跳出当前层 for/while 循环
  • D. 跳出所有 for/while 循环

(10)关于异常处理机制,以下说法正确的是(D)

  • A. 应当大量使用以避免任何可能的错误
  • B. 将所有的代码放到一个 try 语句块中避免程序报错
  • C. 用if判断代替所有的 try-except 结构
  • D. 在输入判断及关键词代码中使用,但不能滥用

PDF 讲义下载链接如下:
链接:https://pan.baidu.com/s/1rc8d2_mmtci0o5vtCSl6rg

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ReadThroughLife

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值