第八课:结构的组合 – 嵌套循环与条件
- 时长: 90 分钟
- 教学目标:
- 理解“嵌套”的概念:在一个结构里面再放一个结构。
- 学习嵌套
for
循环的用法,理解它的执行过程(外层循环转一圈,内层循环转所有圈)。 - 学会使用嵌套
for
循环打印二维的图案(比如星号组成的矩形、三角形)。 - 学习嵌套
if
语句的用法,理解它是如何进行更细致的判断的。 - 掌握如何在循环里面使用条件判断 (
if
),根据情况决定循环体内部的操作。 - 通过综合练习,学会组合运用学过的各种结构解决问题。
课程内容
1. 复习与引入 (10 分钟)
- 复习: 复习
for
循环、while
循环、条件判断if-elif-else
和逻辑运算符。 - 提出问题: 老师提问:“我们现在可以重复做一件事情,也可以根据条件做选择。如果我想打印一个 5 行 5 列的星号组成的矩形,怎么办?每一行都是 5 个星号,我要打印 5 行。是不是要在一个重复打印星号的操作外面,再加一个重复的操作?” “如果我想判断一个数字是不是一个大于 10 的偶数,我需要先判断是不是大于 10,如果条件满足了,再进一步判断是不是偶数,这怎么办?”
- 引出嵌套: 这就是嵌套的概念,把一个循环放在另一个循环里面,或者把一个判断放在另一个判断里面。用钟表的时针和分针(时针走一格,分针要走一圈)、楼层和房间号来比喻嵌套。
2. 循环套循环 – 嵌套 for 循环 (25 分钟)
- 概念: 嵌套循环就是一个循环结构(外层循环)的循环体里面,包含另一个完整的循环结构(内层循环)。
- 语法:
# 外层循环 for 外层变量 in 外层序列: # 外层循环体开始 print("外层循环执行一次") # 内层循环 for 内层变量 in 内层序列: # 内层循环体:这里面的代码是重复最多的 # 注意:这里的缩进更深! print("内层循环执行一次") # 内层循环体结束 print("外层循环执行一次后的内层循环结束") # 外层循环体结束
- 执行流程 (重点!): 外层循环每执行一次,内层循环就会完整地执行一遍(从头到尾)。外层循环执行多少次,内层循环的代码就会完整执行多少次。
- 演示: 使用嵌套
for
循环打印坐标(i, j)
,一步步演示执行过程。print("--- 打印坐标 ---") for i in range(3): # 外层循环,i 会是 0, 1, 2 print(f"外层循环 i = {i}") # f-string 简单介绍 for j in range(4): # 内层循环,j 会是 0, 1, 2, 3 print(f" 内层循环 j = {j}") # 通常我们会在这里执行一些操作,比如打印一个字符 print(f" 打印 ({i}, {j})", end=" ") # end=" " 让打印不换行 print() # 内层循环结束后,在外层循环体里打印一个换行 print("嵌套循环结束。")
- 应用:打印图形: 使用嵌套
for
循环打印由星号*
组成的矩形。print("--- 打印 5x5 矩形 ---") for i in range(5): # 外层循环控制行数 for j in range(5): # 内层循环控制每行的字符数 print("*", end=" ") # 打印一个星号和空格 print() # 每行结束换行
- 动手实践: 学生跟着老师演示,理解嵌套循环的执行流程。 尝试修改代码,打印不同大小的矩形。
3. 条件套条件 – 嵌套 if 语句 (15 分钟)
- 概念: 嵌套
if
语句是一个if
(或elif
/else
) 的代码块里面,包含另一个完整的if-elif-else
结构。 - 语法:
if 外层条件: # 外层条件为 True 时执行这里 print("外层条件成立") if 内层条件: # 外层条件为 True,且 内层条件为 True 时执行这里 # 注意:这里的缩进更深! print("外层和内层条件都成立") else: # 外层条件为 True,但 内层条件为 False 时执行这里 print("外层条件成立,内层条件不成立") else: # 外层条件为 False 时执行这里 print("外层条件不成立")
- 执行流程: 只有当外层条件为
True
时,程序才会进入到外层if
的代码块内部,然后进一步判断里面的内层条件。如果外层条件就是False
,那么内层if
里面的代码根本不会被看到。 - 演示: 判断分数等级,先判断是否及格,如果及格再判断是优秀、良好还是普通及格。
print("--- 嵌套 if 判断等级 ---") score = 88 if score >= 60: print("分数及格。") # 嵌套的 if-elif 结构 if score >= 90: print("并且是优秀!") elif score >= 80: print("并且是良好!") else: print("只是普通及格。") else: print("分数不及格。") print("判断完成。")
- 动手实践: 学生修改分数,观察嵌套
if
的判断过程。 尝试编写程序,判断一个数字是否“大于 10 的偶数”(先判断是否大于 10,再判断是否是偶数)。
4. 循环里做选择 – 结合循环和条件判断 (15 分钟)
- 概念: 这是编程中最常用的模式之一。在循环(
for
或while
)遍历的过程中,根据遇到的元素或当前的情况,使用if
语句来决定做什么。 - 作用: 可以在循环中筛选数据、对特定元素进行不同处理、或者在满足条件时提前退出循环(结合
break
)。 - 演示:
- 遍历 1 到 10 的数字,只打印其中的偶数。(在
for
循环里使用if
判断)。print("--- 打印偶数 ---") for i in range(1, 11): if i % 2 == 0: # 如果 i 是偶数 print(i)
- 使用嵌套循环打印一个网格,但在特定位置打印不同的字符。(在嵌套
for
循环内部使用if
)。print("--- 打印棋盘图案 (部分) ---") size = 5 for row in range(size): for col in range(size): # 如果行号和列号都是偶数,或者都是奇数,打印 '#',否则打印 '*' # (row % 2 == 0 and col % 2 == 0) or (row % 2 != 0 and col % 2 != 0) 简写为 (row + col) % 2 == 0 if (row + col) % 2 == 0: print("#", end=" ") else: print("*", end=" ") print() # 每行结束换行
- 遍历 1 到 10 的数字,只打印其中的偶数。(在
- 动手实践: 学生修改棋盘图案代码,实现不同的打印规则。 编写程序,遍历一个字符串,只打印其中的元音字母(a, e, i, o, u)。
5. 课堂综合练习 (15 分钟)
让学生独立完成以下综合练习,需要结合使用循环和条件判断(可能需要嵌套结构):
- 练习 1: 编写一个程序,使用嵌套
for
循环打印一个由*
组成的直角三角形(例如,第一行 1 个*
,第二行 2 个*
,直到第 5 行 5 个*
)。* ** *** **** *****
(提示:内层循环的次数取决于外层循环的变量)。
- 练习 2: 编写一个程序,使用
for
循环遍历 1 到 100 的所有数字。对于每个数字:- 如果能被 3 整除,打印 “Fizz”。
- 如果能被 5 整除,打印 “Buzz”。
- 如果既能被 3 整除又能被 5 整除,打印 “FizzBuzz”。
- 否则,打印数字本身。
(提示:使用if-elif-else
结构,注意判断的顺序)。
- 练习 3: 编写一个程序,使用嵌套
for
循环打印 9×9 乘法表。(提示:外层循环控制被乘数,内层循环控制乘数,计算它们的乘积并打印)。1 * 1 = 1 1 * 2 = 2 2 * 2 = 4 ... 9 * 9 = 81
(注意调整打印格式,让每行乘法算式在一起)。
6. 总结与提问 (10 分钟)
- 回顾: 回顾本节课内容:嵌套的概念,嵌套
for
循环的执行流程(外层一次,内层完整一遍)和应用(打印图形),嵌套if
语句的逻辑,如何在循环中结合if
做选择。 再次强调缩进在嵌套结构中的重要性。 - 提问:
- 在一个
for i in range(3): for j in range(2): print("*")
的嵌套循环中,外层循环执行几次?内层循环总共执行几次?总共会打印多少个*
? - 在一个嵌套
if
语句里,什么时候会执行内层if
的代码? - 在循环里使用
if
可以用来做什么?
- 在一个
- 答疑: 回答学生问题。
7. 布置课后作业 (5 分钟)
- 作业 1: 编写一个程序,使用嵌套
for
循环打印一个由*
组成的倒直角三角形。***** **** *** ** *
- 作业 2: 编写一个程序,使用
for
循环遍历 1 到 50 的数字,找出并打印所有能同时被 3 和 5 整除的数字。(提示:使用一个if
语句和and
逻辑运算符)。 - 作业 3: 编写一个程序,使用嵌套
for
循环和if
语句,打印一个由*
组成的空心正方形(只打印边框,内部是空格)。 - 作业 4: (选做) 编写一个程序,找出 100 以内所有的素数(质数)。(提示:素数是只能被 1 和它本身整除的自然数。判断一个数 n 是否是素数,可以从 2 循环检查到
n-1
,看能不能被整除。如果都不能被整除,那就是素数。需要一个外层循环遍历 1 到 100,内层循环进行素数判断,并在内层循环中使用if
和break
或continue
来控制判断流程)。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)