第5章 流程控制(课件)-《程序设计基础》同步教学(清华大学出版社)

2024-08-11
| 41页
| 34人阅读
| 0人下载
普通

内容正文:

第 5 章  流 程 控 制 2 学习目标: 掌握程序流程图的绘制方法 了解条件语句 了解循环语句 了解多分支选择语句 了解跳转语句 思政内涵: 正确的判断和正确的流程是获得正确结果的关键。人生道路也是一样,只 有在人生道路中做出正确的决策判断,才能有良好的收获,广大学子应树立正 确的世界观、人生观和价值观。 第 5 章 流程控制 3 5.1 程序流程 计算机程序的执行过程就是程序流程。和其他编程语言一样,按照执行流 程划分,程序可分为三大结构,即顺序结构、分支(选择)结构和循环结 构。 顺序结构:自上而下依次执行每一条代码,不重复执行任何代码,也不 跳过任何代码。 分支结构:也称为选择结构,在运行过程中根据条件的不同可能会执行 不同的程序分支。 循环结构:在运行过程中有些代码需要反复执行。 程序流程可以用文字描述,也可以用图形描述。书写文字比较方便,但不 够直观;绘制图形比较麻烦,但看起来直观。流程图是一种普遍的程序控制流 程表示法,即使用图形符号来表示程序的执行过程。为了实现流程图的可读性 4 及一致性,通常使用美国国家标准学会制定的统一图形符号绘制流程图。常见 的流程图符号如表 5-1 所示。 表 5-1 常见的流程图符号 符号 名称 含义 端点、中断 标准流程的开始与结束,每个流程图只有一个起始点 进程 要执行的处理 判断 决策或判断 数据 表示数据的输入/输出 流向 表示执行的方向与顺序 文档 以文件的方式输入/输出 联系 同一流程图中从一个进程到另一个进程的交叉引用 第 5 章 流程控制 5 使用表 5-1 中带方向的箭头和相应的说明文字连接各图标,就形成了程序流 程图,如图5.1 所示。 图 5.1 程序流程图 6 5.2 条件语句 在编写代码时,可以使用条件语句为程序增设条件,使程序产生分支,进 而有选择地执行不同的语句。条件语句包括if 语句、if-else 语句、if-elif-else 语句等。 5.2.1 if 语句 if 语句是单分支条件语句,语法格式如下。 if 逻辑条件: ... 其中,“逻辑条件”一般是一个比较表达式,如果该表达式返回 True,则会 执行冒号下面缩进的代码块;如果该表达式返回 False,则会直接跳过冒号下面 缩进的代码块,按照顺序执行后面的程序。单分支流程图如图 5.2 所示。 第 5 章 流程控制 7 图 5.2 单分支流程图 下面使用if 语句实现一个考试成绩评估的程序,示例代码如程序段 P5.1 所 示。 8 P5.1 单分支条件语句 score = 100 if score > 60: print("成绩合格,你很棒!") print("欢迎来到Python 语言课堂") 运行代码,输出结果如下。 成绩合格,你很棒! 欢迎来到Python 语言课堂 由以上示例的输出结果可知,程序执行了if 语句的代码段。 将以上示例中变量score 的值修改为 50,再次运行代码,输出结果如下。 欢迎来到Python 语言课堂 由该输出结果可知,修改score 的值后,程序未执行if 语句的代码段。 第 5 章 流程控制 9 5.2.2 if-else 语句 if-else 语句是双分支条件语句,语法格式如下。 if 逻辑条件: ... else: ... 当逻辑条件表达式返回 True 时,会执行 if 后面的代码块;当条件表达式返 回False 时,会执行else 后面的代码块。双分支流程图如图 5.3 所示。 10 图 5.3 双分支流程图 使用if-else 语句编写的考试成绩评估程序示例代码如程序段P5.2 所示。 P5.2 双分支条件语句 score = 100 if score > =60: 第 5 章 流程控制 11 print("考试合格") else: print("考试不及格") 运行代码,输出结果如下。 考试合格 将以上示例中变量score 的值修改为 50,再次运行代码,输出结果如下。 考试不及格 通过比较两次的输出结果可知,程序第一次执行了if 语句的代码段,打印 了“考试合格”;修改 score 的值后,执行了else 语句的代码段,打印了“考 试不及格”。 12 5.2.3 if-elif-else 语句 if-elif-[elif]else 语句是多分支条件语句,语法格式如下。 if 逻辑条件 1: ... # 当条件 1 为True 时执行的代码 elif 逻辑条件 2: ... # 当条件 2 为True 时执行的代码 [elif 逻辑条件n:] ... # 当条件n 为True 时执行的代码 else: ... # 当所有条件都为False 时执行的代码 elif 指的是“else if”,表示带有条件的 else 子句。多向选择的语法看似很 复杂,其实非常简单,它只是在双向选择的基础上增加了一个或多个选择分支。 第 5 章 流程控制 13 使用多分支条件语句编写的考试成绩评估程序示例代码如程序段P5.3 所示。 P5.3 多分支条件语句 score = 90 if score >=90: print("考试优秀") elif 80<=score <90: print("考试良好") elif 70<=score <80: print("考试中等") elif 60<=score <70: print("考试及格") else: print("考试不及格") 14 程序可以根据score 的值做出“成绩优秀”“成绩良好”“成绩中等”“成绩 及格”和“成绩不及格”5 个等级的评估。 5.2.4 if 语句嵌套 if 语句是可以嵌套使用的,语法格式如下。 if 条件 1: if 条件 2: ... # 当条件 1 和条件 2 都为True 时执行的代码 else: # 当条件 1 为True、条件 2 为False 时执行的代码 ... else: if 条件 2: 第 5 章 流程控制 15 ... # 当条件 1 为 False、条件 2 为True 时执行的代码 else: ... # 当条件 1 和条件 2 都为False 时执行的代码 对于这种结构,我们不需要死记硬背,只需要从外到内根据条件一个个地 进行判断就可以了。示例代码如程序段P5.4 所示。 P5.4  if 语句的嵌套 gender = "女" height = 172 if gender == "男": if height > 170: print("高个子男生") else: 16 print("矮个子男生") else: if height > 170: print("高个子女生") else: print("矮个子女生") 运行代码,输出结果如下。 高个子女生 在以上代码中,性别 gender 是外层条件,身高 height 是内层条件。修改 变量gender 为“男”,修改 height 为 160,执行代码,输出结果如下。 矮个子男生 第 5 章 流程控制 17 5.3 循环语句 在程序开发过程中有些代码需要重复执行。Python 提供了循环语句,使用 该语句能以简洁的代码实现重复操作。Python 中的循环语句有两种,分别是 while 循环和for 循环。 5.3.1 while 循环语句 while 循环语句的语法格式如下。 while 条件表达式: 代码块 其中,代码块是指缩进格式相同的多行代码,在循环结构中,它又称为循 环体。 18 while 循环流程图如图 5.4 所示。 图 5.4 while 循环流程图 使用while 循环计算 1+2+3+…+100 的和,示例代码如程序段 P5.5 所示。 第 5 章 流程控制 19 P5.5  while 循环 i=1 sum=0 while i<=100: sum +=i i +=1 print(sum) 运行代码,输出结果如下。 5050 在以上示例中,变量 i 是循环因子,其初始值为 1,会随循环次数累加;变 量sum 是所求的和,其初始值为 0。循环结束,执行循环之后的打印语句,输 出sum 的值。 20 while 循环还常用来遍历列表、元组和字符串,因为它们都支持通过下标索 引获取指定位置的元素。下面演示使用while 循环遍历字符串变量,示例代码 如程序段P5.6 所示。 P5.6 遍历字符串 my_char="http://www.ahu.net/python/" i = 0; while i<len(my_char): print(my_char[i],end="") i = i + 1 运行代码,输出结果如下。 http://www.ahu.net/python/ 若希望程序可以一直重复操作,则可以将循环条件的值设为 True,如此便 第 5 章 流程控制 21 进入无限循环。虽然在实际开发中有些程序需要无限循环(如游戏的主要程序、 操作系统的监控程序等),但无限循环会占用大量内存,影响程序和系统的性能, 开发者需酌情使用。 5.3.2 for 循环语句 for 循环常用于遍历字符串、列表、元组、字典、集合等序列类型,逐个获取 序列中的各个元素。 for 循环语句的语法格式如下。 for 迭代变量 in 字符串/列表/元组/字典/集合: 代码块 其中,迭代变量用于存放从序列类型变量中读取出来的元素,所以一般不 会在循环中对迭代变量手动赋值;代码块是指具有相同缩进格式的多行代码, 22 和循环结构联用,因此代码块又称为循环体。目标对象的元素个数决定了循环 的次数,目标对象中的元素被访问完之后循环结束。 for 循环流程图如图 5.5 所示。 图 5.5 for 循环流程图 第 5 章 流程控制 23 使用for 循环遍历字符串的示例代码如程序段P5.7 所示。 P5.7  for 循环遍历字符串 my_char = "http://www.ahu.net/python/" for ch in my_char: print(ch,end="") 运行代码,输出结果如下。 http://www.ahu.net/python/ 使用for 循环进行数值计算的示例代码如程序段P5.8 所示。 P5.8  for 循环计算 print("计算 1+2+…+100 的结果为:") result = 0 for i in range(101): 24 result += i print(result) 运行代码,输出结果如下。 计算 1+2+…+100 的结果为: 5050 上面的代码中,使用了 range()函数,此函数是 Python 内置函数,用于生 成一系列连续整数,多用于for 循环中。 当用for 循环遍历列表或元组时,其迭代变量会先后被赋值为列表或元组 中的每个元素并执行一次循环体。示例代码如程序段P5.9 所示。 P5.9  for 循环遍历列表 my_list = [1,2,3] for ele in my_list: 第 5 章 流程控制 25 print('ele =', ele) 运行代码,输出结果如下。 ele = 1 ele = 2 ele = 3 在以上代码中,把遍历的列表改成元组,就可以使用 for 循环遍历元组, 读者可以自己修改代码练习。 当用for 循环遍历字典时,其迭代变量会先后被赋值为字典的每个元素的 键值并执行一次循环体。示例代码如程序段P5.10 所示。 P5.10  for 循环遍历字典 my_dict = {'python 教程':"http://www.ahu.net/python/",\ 'shell 教程':"http://www.ahu.net/shell/",\ 26 'java 教程':"http://www.ahu.net/java/"} for ele in my_dict: print('ele =', ele) 运行代码,输出结果如下。 ele = python 教程 ele = shell 教程 ele = java 教程 5.3.3 循环嵌套语句 循环之间可以互相嵌套,进而实现更为复杂的逻辑。循环嵌套按不同的循 环语句可以分为while 循环嵌套和for 循环嵌套。 第 5 章 流程控制 27 1. while 循环嵌套 while 循环嵌套是指while 语句中嵌套了while 或for 语句。以 while 语句 中嵌套while 语句为例,while 循环嵌套的语法格式如下。 while 条件 1: 条件 1 成立执行的语句 ... while 条件 2: 条件 2 成立执行的语句  ... 下面使用while 循环嵌套打印一个九九乘法表,示例代码如程序段P5.11 所示。 28 P5.11  while 循环嵌套 j = 1 while j <= 9: i = 1 while i <= j: print(f'{i}*{j}={j*i}', end='\t') i += 1 print() j += 1 运行代码,输出结果如下。 1*1=1 1*2=2 1*3=3 2*2=4 2*3=6 3*3=9 第 5 章 流程控制 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81 29 2. for 循环嵌套 for 循环嵌套是指for 语句中嵌套了while 或for 语句。以for 语句中嵌套 for 语句为例,for 循环嵌套的语法格式如下。 for i in 相关容器(初始位置,最终位置,遍历步调): ... # 相关遍历要求代码 30 for j in 相关容器(初始位置,最终位置,遍历步调): ... # 相关遍历要求代码 下面使用for 循环嵌套打印一个数字金字塔,示例代码如程序段P5.12 所 示。 P5.12  for 循环嵌套 layer = int(input("请输入您想打印的数字三角形的层数:")) for i in range(1, layer + 1): for j in range(1,i + 1): num = j print(num,end=" ") j += 1 i += 1 print("") 第 5 章 流程控制 31 运行代码,输入数据,输出结果如下。 请输入您想打印的数字三角形的层数:5 1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 5.4 多分支选择语句 Python 编程语言正在不断发展,每次更新都会添加新的特性和功能, Python 3.10 中增加了多分支选择语句,也称为match-case 语句,允许在多 个条件下控制程序流程。match-case 语句的语法格式如下。 32 match parameter: case first : do_something(first) case second : do_something(second) ... ... case n : do_something(n) case _ : nothing_matched_function() match-case 语句使用match 关键字,通过参数parameter 与case 关键 第 5 章 流程控制 33 字后的参数匹配,如果匹配成功,则执行对应的case 代码段,“_”是通配符, 当没有任何匹配项时运行该代码段。 多分支选择的示例代码如程序段P5.13 所示。 P5.13 多分支选择 day=input("请输入一个数字(1~7):") match day: case "1": print("星期一") case "2": print("星期二") case "3": print("星期三") case "4": 34 print("星期四") case "5": print("星期五") case "6": print("星期六") case "7": print("星期日") case _: print("请输入一个有效数字!") 运行代码,根据提示输入数据,输出结果如下。 请输入一个数字(1~7):7 星期日 第 5 章 流程控制 35 5.5 跳转语句 循环语句在条件满足的情况下会一直执行,但在某些情况下需要跳出循环, 例如,实现音乐播放器循环模式的切歌功能等。Python 提供了控制循环的跳转 语句:break 语句和 continue 语句。 5.5.1 break 语 句 break 语句用于结束循环,若循环中使用了 break 语句,当程序执行到 break 语句时就会结束循环;若循环嵌套使用了 break 语句,当程序执行到 break 语句时就会结束本层循环。break 语句通常与if 语句配合使用,以便在 36 条件满足时结束循环。 例如,在使用for 循环遍历字符串"python"时,遍历到字符"o"就使用break 语句结束循环,具体代码如程序段P5.14 所示。 P5.14  break 语句 for ch in "python": if ch=="o": break print(ch,end=" ") 运行代码,输出结果如下。 p y t h 从以上输出结果可以看出,程序没有输出字符"o"及后面的字符,说明当程 序遍历到字符"o"时跳出了整个循环,即结束了循环。 第 5 章 流程控制 37 5.5.2 continue 语句 continue 语句用于在满足条件的情况下跳出本次循环,该语句通常也与if 语句配合使用。例如,在使用 for 循环遍历字符串"python"时,遍历到字符"o" 就使用continue 语句跳出本次循环,具体代码如程序段P5.15 所示。 P5.15  continue 语句 for ch in "python": if ch=="o": continue print(ch,end=" ") 运行代码,输出结果如下。 p y t h n 38 从以上输出结果可以看出,程序没有输出字符"o",说明当程序满足字符"o" 的条件时跳过了当次循环。 5.6 人机大战猜拳游戏程序设计案例 5.6.1 程序流程图 根据第 4 章计算思维设计的人机大战猜拳游戏的算法,可以画出程序流程 图。人机大战游戏程序流程图如图 5.6 所示。 第 5 章 流程控制 39 图 5.6 人机大战游戏程序流程图 40 5.6.2 程序设计 根据图 5.6 所示的流程图,编写人机大战猜拳游戏程序,代码如程序段 P5.16 所示。 P5.16 人机大战猜拳游戏程序 import random handList = ['剪刀','石头','布'] personNumber = int(input("请选择:(剪刀-0;石头-1;布-2) 数字:")) personChoice = handList[personNumber] computerNumber = random.randint(0,2) computerChoice = handList[computerNumber] if personChoice == computerChoice: print("平局!") 第 5 章 流程控制 41 elif (personChoice == '剪刀' and computerChoice =="布" or personChoice == '石头' and computerChoice =="剪刀" or personChoice == '布' and computerChoice =="石头"): print("人赢了!") else: print("计算机赢了!") 以上程序是最基本的猜拳游戏实现代码。大家可以试着为程序增加一些新 的功能或设计人机交互界面等,通过实践提高编程能力。 $$

资源预览图

第5章 流程控制(课件)-《程序设计基础》同步教学(清华大学出版社)
1
第5章 流程控制(课件)-《程序设计基础》同步教学(清华大学出版社)
2
第5章 流程控制(课件)-《程序设计基础》同步教学(清华大学出版社)
3
第5章 流程控制(课件)-《程序设计基础》同步教学(清华大学出版社)
4
第5章 流程控制(课件)-《程序设计基础》同步教学(清华大学出版社)
5
第5章 流程控制(课件)-《程序设计基础》同步教学(清华大学出版社)
6
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。