第八课:结构的组合 – 嵌套循环与条件

  • 时长: 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 分钟)

  • 概念: 这是编程中最常用的模式之一。在循环(forwhile)遍历的过程中,根据遇到的元素或当前的情况,使用 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() # 每行结束换行
      
  • 动手实践: 学生修改棋盘图案代码,实现不同的打印规则。 编写程序,遍历一个字符串,只打印其中的元音字母(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,内层循环进行素数判断,并在内层循环中使用 ifbreakcontinue 来控制判断流程)。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。