教案:循环与判断的结合—质数判断
教案基本信息
课程名称:Python编程第六课 循环与判断的结合——质数判断
授课对象:for 和while循环
课时安排:45分钟
教学形式:理论讲解 + 实践操作
一、 教学目标
知识与技能:
- 数学知识: 理解质数(素数)的定义(在大于1的自然数中,除了1和它本身以外不再有其他因数的数)。
- 编程知识:掌握在循环结构中嵌套选择结构(if语句)的语法和执行流程。能够将质数的数学定义转化为程序判断逻辑。理解并使用标志变量(Flag)来跟踪程序的判断状态。
过程与方法:
- 经历将数学概念(质数)转化为计算机算法的完整过程,培养计算思维和问题分解能力。
- 通过“暴力枚举法”判断质数,体验循环嵌套判断的经典编程模式。
情感态度与价值观:
- 体会编程解决数学问题的严谨性和强大能力,感受算法思维的魅力。
- 培养耐心、细致的调试习惯,理解优化算法的重要性。
二、 教学重点与难点
教学重点:质数判断算法的逻辑推导;循环结构中嵌套if判断结构的实现。
教学难点:理解并设置循环的边界条件(如判断范围到平方根);理解标志变量在判断过程中的作用。
三、 教学准备
教师:安装Python环境的电脑、投影设备、教学课件。
学生:电脑已安装Python环境,已掌握for循环、while循环和if选择结构。
四、 教学过程
(一) 问题导入:什么是质数?(5分钟)
教师活动:
- 提问:“同学们,什么是质数?能举几个例子吗?”(引导学生回答:2, 3, 5, 7, 11…)
- 明确质数的定义(板书): 一个大于1的自然数,如果除了1和它自身外,不能被其他自然数整除,那么这个数就是质数。
- 提出挑战:“那么,如何判断一个数比如17,是不是质数呢?我们人脑会怎么做?”(引导学生说出:看它能不能被2, 3, 4, …, 16整除)
- 引出主题:“这个过程充满了重复性的‘试除’操作,这正是计算机的强项!今天我们就教计算机如何判断质数。”
设计意图:从熟悉的数学概念出发,引出可被算法化的问题,激发编程兴趣。
(二) 算法设计:从数学逻辑到程序思路(10分钟)
教师引导分析判断逻辑(以判断数字n是否为质数为例):
- 特殊情况处理:如果n <= 1,根据定义,不是质数。
- 特殊情况处理:如果n == 2,是质数。
- 偶数判断:如果n是大于2的偶数(n % 2 == 0),不是质数。
- 一般情况(核心算法):对于大于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} 不是质数。”)
代码讲解要点:
- int(n**0.5) + 1:n**0.5是计算平方根,int()取整,+1是因为range不包含终点。
- range(3, int(n**0.5) + 1, 2):从3开始,只生成奇数序列作为除数。
- if n % i == 0::这是嵌套在for循环内部的if判断,是本节课的核心。
- break:一旦发现一个因数,就能确定n不是质数,立即终止循环,避免不必要的计算。
- 整个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分钟)
小结:
算法思想:质数判断的“试除法”是“枚举思想”和“循环嵌套判断”的经典应用。
编程技巧:
- 标志变量(Flag):用于记录程序执行过程中的状态。
- 循环嵌套选择结构:for/while循环内部可以包含复杂的if-elif-else判断。
- 边界优化:循环到平方根即可,大幅减少计算量。
- 提前终止:使用break提高效率。
作业:
- 基础题:修改程序,使其能判断用户输入的数是否是质数,如果不是,请输出它的一个最小因数(1和它本身除外)。
- 挑战题:编写程序,验证哥德巴赫猜想在100以内的偶数是否成立(任何大于2的偶数都可以表示为两个质数之和)。例如:4=2+2, 6=3+3, 8=3+5等。
五、 板书设计
主标题:循环与判断的结合——质数判断
质数定义:大于1的自然数,因子只有1和自身。
算法流程图:
核心代码结构:
python
for i in range(…):
if 条件:
# 执行操作
break # (可选)