教案:循环与判断的结合—质数判断

教案基本信息

课程名称:Python编程第六课 循环与判断的结合——质数判断
授课对象:for 和while循环
课时安排:45分钟
教学形式:理论讲解 + 实践操作

一、 教学目标

知识与技能:

  1. 数学知识: 理解质数(素数)的定义(在大于1的自然数中,除了1和它本身以外不再有其他因数的数)。
  2. 编程知识:掌握在循环结构中嵌套选择结构(if语句)的语法和执行流程。能够将质数的数学定义转化为程序判断逻辑。理解并使用标志变量(Flag)来跟踪程序的判断状态。

过程与方法:

  1. 经历将数学概念(质数)转化为计算机算法的完整过程,培养计算思维和问题分解能力。
  2. 通过“暴力枚举法”判断质数,体验循环嵌套判断的经典编程模式。

情感态度与价值观:

  1. 体会编程解决数学问题的严谨性和强大能力,感受算法思维的魅力。
  2. 培养耐心、细致的调试习惯,理解优化算法的重要性。

二、 教学重点与难点

教学重点:质数判断算法的逻辑推导;循环结构中嵌套if判断结构的实现。

教学难点:理解并设置循环的边界条件(如判断范围到平方根);理解标志变量在判断过程中的作用。

三、 教学准备

教师:安装Python环境的电脑、投影设备、教学课件。

学生:电脑已安装Python环境,已掌握for循环、while循环和if选择结构。

四、 教学过程

(一) 问题导入:什么是质数?(5分钟)

教师活动:

  1. 提问:“同学们,什么是质数?能举几个例子吗?”(引导学生回答:2, 3, 5, 7, 11…)
  2. 明确质数的定义(板书): 一个大于1的自然数,如果除了1和它自身外,不能被其他自然数整除,那么这个数就是质数。
  3. 提出挑战:“那么,如何判断一个数比如17,是不是质数呢?我们人脑会怎么做?”(引导学生说出:看它能不能被2, 3, 4, …, 16整除)
  4. 引出主题:“这个过程充满了重复性的‘试除’操作,这正是计算机的强项!今天我们就教计算机如何判断质数。”

设计意图:从熟悉的数学概念出发,引出可被算法化的问题,激发编程兴趣。

(二) 算法设计:从数学逻辑到程序思路(10分钟)

教师引导分析判断逻辑(以判断数字n是否为质数为例):

  1. 特殊情况处理:如果n <= 1,根据定义,不是质数
  2. 特殊情况处理:如果n == 2,是质数
  3. 偶数判断:如果n是大于2的偶数(n % 2 == 0),不是质数
  4. 一般情况(核心算法):对于大于2的奇数n,我们需要用从3开始的所有奇数去试除,直到 n 的平方根。

为什么试到平方根就足够了? 因为如果n有一个大于其平方根的因数,那么必然对应一个小于其平方根的因数。只需检查到平方根即可。

引入“标志变量”概念:

比喻:就像一面信号旗。一开始我们假设这个数是质数,把旗子立起来 (is_prime = True)。如果在试除过程中发现它能被某个数整除,就把旗子放倒 (is_prime = False)。循环结束后,看旗子的状态就知道结果了。

(三) 代码实现:循环嵌套判断(20分钟)

教师带领学生分步编写代码:

python

# 判断一个数是否为质数

# 1. 获取用户输入

n = int(input(“请输入一个大于1的自然数: “))

# 2. 初始化标志变量,先假设它是质数

is_prime = True

# 3. 特殊情况判断

if n <= 1:

    is_prime = False  # 1和以下的数不是质数

elif n == 2:

    is_prime = True   # 2是质数

elif n % 2 == 0:      # 排除所有大于2的偶数

    is_prime = False

else:

    # 4. 核心部分:循环嵌套判断

    # 从3开始,到n的平方根,步长为2(只检查奇数因子)

    # 使用int(n**0.5) + 1是为了确保覆盖到平方根

    for i in range(3, int(n**0.5) + 1, 2):

        # 判断i是否是n的因数(嵌套的if判断!)

        if n % i == 0:

            is_prime = False

            break  # 一旦找到一个因数,立即跳出循环,提高效率

# 5. 根据标志变量输出最终结果

if is_prime:

    print(f”{n} 是质数。”)

else:

    print(f”{n} 不是质数。”)

代码讲解要点:

  1. int(n**0.5) + 1:n**0.5是计算平方根,int()取整,+1是因为range不包含终点。
    1. range(3, int(n**0.5) + 1, 2):从3开始,只生成奇数序列作为除数。
    1. if n % i == 0::这是嵌套在for循环内部的if判断,是本节课的核心。
    1. break:一旦发现一个因数,就能确定n不是质数,立即终止循环,避免不必要的计算。
    1. 整个for循环是else分支的一部分,只有当n是大于2的奇数时才会执行。

(四) 程序测试与验证(5分钟)

师生共同测试:运行程序,输入以下数字,验证结果的正确性。

1 -> 不是质数

2 -> 是质数

9 -> 不是质数(可被3整除)

17 -> 是质数

100 -> 不是质数(偶数)

强调调试:可以通过在循环内添加print(i)语句,观察程序实际检查了哪些除数,加深理解。

(五) 拓展应用:输出一定范围内的所有质数(10分钟)

任务:输出100以内的所有质数。

思路:在外层使用一个循环来遍历2到100之间的每个数,内层嵌套我们刚才写好的质数判断逻辑。

代码实现:

python

print(“100以内的质数有:”)

for num in range(2, 101):  # 外层循环:遍历2到100

    # 内层循环:对每个num判断是否为质数(复用之前的逻辑)

    is_prime = True

    if num <= 1:

        is_prime = False

    elif num == 2:

        is_prime = True

    elif num % 2 == 0:

        is_prime = False

    else:

        for i in range(3, int(num**0.5) + 1, 2):

            if num % i == 0:

                is_prime = False

                break

    # 如果是质数,则打印

    if is_prime:

        print(num, end=’ ‘)

讲解:这是一个双重循环嵌套的典型例子。外层循环控制范围,内层循环(包含判断)负责质数判断。

(六) 课堂小结与作业(5分钟)

小结:

算法思想:质数判断的“试除法”是“枚举思想”和“循环嵌套判断”的经典应用。

编程技巧:

  1. 标志变量(Flag):用于记录程序执行过程中的状态。
  2. 循环嵌套选择结构:for/while循环内部可以包含复杂的if-elif-else判断。
  3. 边界优化:循环到平方根即可,大幅减少计算量。
  4. 提前终止:使用break提高效率。

作业:

  1. 基础题:修改程序,使其能判断用户输入的数是否是质数,如果不是,请输出它的一个最小因数(1和它本身除外)。
  2. 挑战题:编写程序,验证哥德巴赫猜想在100以内的偶数是否成立(任何大于2的偶数都可以表示为两个质数之和)。例如:4=2+2, 6=3+3, 8=3+5等。

五、 板书设计

主标题:循环与判断的结合——质数判断

质数定义:大于1的自然数,因子只有1和自身。

算法流程图:

核心代码结构:

python

for i in range(…):

    if 条件:

        # 执行操作

        break # (可选)

您可能还喜欢...