浙教版(2019)信息技术 必修1 3.2.5 Python语言程序设计——函数和模块 教学设计(2课时)

文档属性

名称 浙教版(2019)信息技术 必修1 3.2.5 Python语言程序设计——函数和模块 教学设计(2课时)
格式 zip
文件大小 50.5KB
资源类型 教案
版本资源 浙教版(2019)
科目 信息技术(信息科技)
更新时间 2021-01-19 14:43:52

文档简介

函数教学设计
课程标准

教学目标
函数
教材内容:本课包含教材3.2.5函数与模块1.函数的构造及应用
适应的课程标准:
1.7掌握一种程序设计语言的基本知识,使用程序设计语言实现简单算法。
教学目标:
●掌握函数的构造(函数名、参数结合、函数体、函数值)和调用方法。
●掌握通过自定义函数编程解决问题的方法。
指向的核心素养:
●信息意识:在合作解决问题的过程中,愿意与团队成员共享信息,实现信息的最大价值。
●计算思维:(1)通过判断、分析与综合各种信息资源,运用合理的算法形成解决问题的方案。(2)总结利用计算机解决问题的过程与方法,并迁移到与之相关的其他问题解决中
学习环境:有教学控制软件的多媒体机房,需要安装Python编程环境。
建议课时:1课时
教学活动设计
教学环节
教学过程
设计意图
情境导入
问题1:Python中有很多内建函数,现有一个列表lst
=
[3,
2,
5,
4,
7],请问要找到列表中最大的数应该使用哪个函数?代码如何写?
参考答案:
max,max(lst)。
问题2:如果不用Python的内建函数max,直接写代码来找到列表lst中的最大值代码该如何写?
参考答案:
lst
=
[3,
2,
5,
4,
7]
maxn
=
lst[0]
for
item
in
lst[1:]:
if
item
>
maxn:
maxn
=
item
print(maxn)
问题3:对比问题1和问题2查找列表中最大值的方法你觉得哪种方式更加简单?假设在你的程序中有26个列表需要查找列表中的最大值,是采用问题2的方式重复问题2中的代码还是直接调用max函数更加简便、省力?
参考答案:
使用内建函数更加简单。如果需要重复使用函数,调用内建函数更加简便、省力、省代码。
教师总结:
①内建函数实际上只是实现了某段代码功能的快捷方式。
②内建函数可以重复使用,省去我们写重复代码的成本。
问题4:同学们查一查?有没有什么函数可以快速的计算列表中所有数字的平均值的?
参考答案:
没有。
教师总结:
不是任何情况下都有可以用内建函数来解决我们编程中的问题,不是所有的功能都可以用内建函数来解决,但是在我们实际的编程中确实存在在这样一些功能,经常需要使用的,比如求平均值,Python的作者也考虑到了这一点,允许我们自定义函数,把我们需要重复解决的问题和功能定义为自定义函数,这样我们就可以在自己的程序中调用自定义函数来简化我们的代码,去除重复的代码。
设计意图:通过问题1、问题2和问题3让学生了解内建函数是什么。使用内建函数的优势和函数的作用,激发学生学习函数的兴趣。通过问题4引出本节课的内容—函数的构造及应用。
新课教学
●知识讲解—定义函数的语法及定义函数示例
教师讲解Python中定义函数的语法:
def
函数名(参数集合):
<函数体>
[return
函数值]
其中的函数名命名规则和变量名命名的规则一样。
参数集合是调用该函数需要提供的数据。比如数学中的函数f(x)
=
x
+
1,如果不告诉f(x)参数x的取值,这个函数就无法进行计算。
函数体是函数需要执行的具体代码(计算过程),比如
f(x)
=
x
+
1中的
x
+
1。
函数值是函数执行完毕以后计算的结果,如f(x)
=
x
+
1这个函数,f(2)
=
3,3就是函数计算的返回值。
定义完成函数以后可以像内建函数一样,在程序中调用该函数。
任务:观察下面3个函数的构造和调用方式,小组讨论这些函数有哪些不同点?小组合作绘制函数的构造的思维导图,指明哪些部分是必须的,哪些部分是不可或缺的。
(1)
def
alert():
print('注意危险')
alert()
#调用
(2)
def
alert(msg):
print(msg)
alert('危险')
#调用
alert('注意')
#调用
(3)
def
my_abs(x):
if
x
>=
0:
return
x
else:
return
-x
my_abs(6)
#调用
my_abs(-8)
#调用
参考答案:
(1)无参数集合、不返回函数值的函数定义和调用
(2)有参数集合、不返回函数值的定义和调用
(3)有参数集合、有返回函数值的定义和调用
●学习任务—“素数检验”函数的编程实现
编写一个函数,接受一个大于1的自然数作为参数,若该自然数是素数返回True,否则返回False。
参考答案:
def
is_prime(x):
yes
=
True
for
i
in
range(2,
x
-
1):
if
x
%
i
==
0:
yes
=
False
break
return
yes
●学习任务—“地块面积计算”编程实现
某地块为四边形,地块边长分别为L1、L2、L3、L4。请编程实现该地块面积计算的程序。
分析:
要想计算其面积可通过如下算法完成,L1、L3相交的顶点和L2、L4相交的顶点画一条线L5,L5将此地块划分成两个三角形,只要再丈量出L5的长度,就可以利用海伦公式分别计算出这两个三角形的面积S1和S2,从而得到此地块的总面积S(S
=
S1
+
S2)。
该算法将两次使用海伦公式分别求S1和S2两个三角形的面积,这里存在了重复的代码,所以可以先编程实现一个求三角形面积的函数Area。
任务一:利用海伦公式编写求三角形面积的函数。
分析:
该函数接受3个参数,分别是三角形的三条边,返回的函数值是三角形的面积。利用的计算模型是海伦公式。
参考答案:
def
area(a,
b,
c):
p
=
(a
+
b
+
c)
/
2
s
=
(p
(p
-
a)
(p
-
b)
(p
-
c))
0.5
return
s
任务二:利用求三角形面积的函数来计算地块面积。
分析:
地块的L1、L2、L3、L4、L5的长度已知的情况下,调用函数area(L1,
L2,
L5)计算S1的面积,调用函数area(L3,
L4,
L5)计算S2的面积。S为S1和S2面积的总和。
参考答案:
S
=
area(L1,
L2,
L5)
+
area(L3,
L4,
L5)
任务三:地块面积的计算也是一个常用的功能,请将地块计算定义为一个函数方便以后遇到类似问题时直接调用。
分析:
地块计算函数返回的函数值是地块的面积,接受的参数是地块的L1、L2、L3、L4、L5的长度。在该函数内部可以调用area函数分别计算S1和S2的值,然后返回S1和S2的和即为地块的面积。
参考答案:
def
quad(a,
b,
c,
d,
e):
return
area(a,
b,
c)
+
area(a,
b,
c)
调用方式:quad(L1,
L2,
L3,
L4,L5)
设计意图:通过讲解函数的定义语法及实例让学生了解函数定义的语法,函数的构造和函数的调用。
设计意图:通过该任务加深学生对于函数构造的理解,与此同时,培养学生小组合作的能力,并在合作学习的过程中,与团队成员共享信息,实现信息的更大价值的信息意识素养。
设计意图:让学生初步掌握构造定义函数的方法,并加深对函数构造的理解。培养通过判断、分析与综合各种信息资源,运用合理的算法形成解决问题的方案的计算思维。
设计意图:掌握构造自定义函数解决问题的方法,培养通过判断、分析与综合各种信息资源,运用合理的算法形成解决问题的方案的计算思维。
设计意图:任务三能够进一步加深函数应用的理解,不仅仅是在解决问题的时候会用到函数,问题本身也可以是一个函数,把解决问题的代码封装为一个函数。通过“地块面积计算”问题的解决完成本课的重点也是难点“构造自定义函数解决实际问题”的教学。解决这个问题需要计算机解决问题的一般步骤:“抽象建模”—“设计算法”—“编写程序”,因此,这个过程中中也培养学生总结利用计算机解决问题的过程与方法,并迁移到与之相关的其他问题解决中的计算思维。
课堂小结
知识梳理:
1.函数的构造(函数名、参数结合、函数体、函数值)和调用方法。
2.通过自定义函数编程解决问题的方法。
通过回顾总结帮助学生巩固函数的构造及应用,通过自定义函数编程解决问题的方法。
作业布置
基础作业(面向所有学生):
本节配套课后作业
提升作业(面向学有余力学生):
尝试编写一个函数实现内建函数len的功能
根据学生的基础和能力设置不同难度的作业,以满足不同层次的学生需求。基础作业巩固本节课所学知识,提升作业让学生能够更多的思考与探究,进一步加深对于函数构造与应用的理解。
教学设计思路
本课内容为函数的构造与应用。函数是编程中比较重要的内容,函数可以把实现同一功能程序代码进行封装,去除了程序中重复的代码,缩减了代码的长度,在解决同类程序问题时更加便捷,是编程解决实际问题的过程中必不可少的工具。
在教学中,建议通过内建函数的使用导入本节课的内容,让学生对比使用内建函数和不使用内建函数的代码,亲身感受函数给编程带来的便利,缩减程序代码长度方面的优势,了解函数在代码复用方面起到的作用,激发学生学习函数的兴趣。
对于函数的构造这块内容,建议教师可以通过讲解的方式来介绍,随后设置一个任务,让学生观察不同函数,小组讨论、分析这些函数构造的区别,总结组成函数各个部分,绘制函数构造的思维导图,加深学生对于函数构造的理解。
学生掌握了函数构造后,建议布置实际编程问题给学生,在解决这些问题的过程中掌握构造自定义函数解决实际问题的方法,完成本课的重点教学和难点教学。在本案例中提供给了一小一大2个任务。一个任务是在学生了解函数的构造以后的小任务“素数检验”函数的编写,通过这个任务能够帮助学生进一步的理解函数的构造并初步掌握自定义函数的编写。随后的大任务“地块面积计算”是一个综合性较强的实际问题,通过分析问题、设计算法、编写程序掌握构造自定义函数解决问题的方法。在解决“地块面积计算”任务的时候,设置了一个编写“地块面积计算”函数的小任务,学生通过编程解决这个任务能够更好的理解函数的复用在解决实际问题时候的应用场景。
针对
核心素养培养的
设计考虑
本节课的主要内容是函数的构造与应用,需要编写程序构造自定义函数解决实际问题,所以核心素养的培养主要落在计算思维的培养上。编写自定义函数的时候,必须对函数的构造完全掌握,为了帮助学生更好的掌握函数的构造,可以让学生小组合作讨论、分析,深入解剖函数的构造,在此过程中培养学生愿意与团队成员共享信息,实现信息的最大价值的信息意识。
本节课对于计算思维的培养有两个维度。第一个维度是通过判断、分析与综合各种信息资源,运用合理的算法形成解决问题的方案。本课在进行教学设计的时候设计了两个学习任务
“素数检验函数”和“地块面积计算”。学生在解决这两个问题的时候要给予学生充分的时间进行分析、讨论,根据分析、讨论的结果形成合力的算法来解决这两个问题。第二个维度是总结利用计算机解决问题的过程与方法,并迁移到与之相关的其他问题解决中。在编写构造函数的过程中,也需要经历“抽象建模”—“设计算法”—“编写程序”这3个计算机编程解决问题的步骤,在完成本课设计的这两个学习任务的过程中,学生将这种方法迁移并运用到编写构造函数的过程中,从而培养第二个维度的计算思维。
本节课信息意识的培养主要落实通过小组合作,讨论、分析函数构造的各个组成部分,并绘制函数构造思维导图的过程中。为了让学生能够讨论分析函数构造的各个组成部分,教师先要把函数的构造进行简单的介绍,然后教师准备了几个简单的函数构造的小例子,这些例子有的没有参数集合,有的没有返回值,有了这些例子,学生可以针对这些例子共同探讨、分析,培养学生愿意与团队成员共享信息,实现信息的最大价值的信息意识。模块教学设计
课程标准

教学目标
模块
教材内容:本课包含教材3.2.5函数与模块2.模块的导入与应用
适应的课程标准:
1.7掌握一种程序设计语言的基本知识,使用程序设计语言实现简单算法。通过解决实际问题,体验程序设计的基本流程,感受算法的效率,掌握程序调试与运行的方法。
教学目标:
●理解模块的功能及应用。
●掌握模块的导入方法。
●掌握模块中常数和函数的使用。
●学会利用模块中的常数和函数编写程序解决实际问题。
指向的核心素养:
●信息意识:在合作解决问题的过程中,愿意与团队成员共享信息,实现信息的最大价值。
●计算思维:通过判断、分析与综合各种信息资源,运用合理的算法形成解决问题的方案。针对给定的任务进行需求分析,明确需要解决的关键问题。运用基本算法设计解决问题的方案,能使用编程语言或其他数字化工具实现这一方案。
学习环境:有教学控制软件的多媒体机房,需要安装Python编程环境。
建议课时:1课时
教学活动设计
教学环节
教学过程
设计意图
情境导入
问题:各位同学,大家应该都见过电工,电工在工作的时候需要用到哪些工具?他是全部拿在手里吗?如果不是,通常是如何保管的?
参考答案:
电工常用的工具:螺丝刀是一种用来拧转螺丝以使其就位的工具。老虎钳用来起钉子或夹断钉子和铁丝,电能表的简称,是用来测量电能的仪表。电工使用的工具比较多,一般不会都拿在手里,不是每样工具每次都要使用到,电工把这些工具按照一定的分类放到不同的工具包中,需要的时候才拿出某个工具使用。
讲解:同样的,Python有很多的内建函数、常数,但是这些函数、常数不可能每次编程都用到,每次都加载这些函数、常数到当前的编程环境中是没有必要的,所以,我们也仿照电工的做法,把这些内建函数和常数放到工具包中,这些工具包在Python中称之为模块。
通过电工保管工具的工具包引出本节课的学习内容—模块。通过与生活具体实例对比,让学生理解模块的功能。
新课教学
●知识讲解—模块的导入及使用
导入模块:

import
<模块名>

from
<模块名>
import
<函数|常数>
例:
import
math
from
math
import
sqrt
调用模块中的函数和常数
第①种方式可以用<模块名>.<函数名>或者<模块名>.<常数>的方式来调用函数名或常数。比如:
math.sqrt(9)
#结果:3.0
math.pi
#结果:3.141592653589793
第②种方式可以直接用<函数名>或者<常数>的方式来调用函数名或常数。比如:
sqrt(9)
#结果:3.0
pi
#结果:3.141592653589793
●学习任务—计算圆面积
任务:编程求圆面积,公式为s=πr^2中的π和r^2分别调用math模块中的圆周率常数math.pi和函数pow来完成。
提示:math.pow(x,
y)实现指数运算,得到x的y次方。
参考答案:
import
math
r
=
float(input("请输入圆的半径r:"))
pi
=
math.pi
s
=
pi
pow(r,
2)
print("圆面积是:"
+
str(s))
●学习任务—合唱比赛出场顺序安排
高一年级的(2)班、(3)班、(5)班、(8)班、(9)班共5个班级的学生参加大合唱比赛,为了公平起见,需要安排他们的出场顺序。请同学们至少提供两种不同的方法来解决该问题。
Random模块中的常用函数:
random.random():生成一个[0,1)范围内的实数
random.uniform(a,
b):随机生成一个[a,b]范围内的实数
random.randint(a,
b):随机生成一个[a,b]范围内的整数
random.choice(seq):从序列的元素中随机挑选一个元素,比如random.choice(range(10)),从0到9中随机挑选一个整数。
random.sample(seq,
k):从序列中随机挑选k个元素
random.shuffle(seq):将序列的所有元素随机排序
参考答案:
①random模块中的函数shuffle接受一个列表作为输入参数,该函数将该列表中的所有元素重新随机排序,然后再将所有元素重新随机排序后的列表作为函数值返回。可以构建一个列表cla
=
["(2)班",
"(3)班",
"(5)班",
"(8)班",
"(9)班"],然后直接使用shuffle函数得到cla所有元素随机排序的列表。
import
random
cla
=
["(2)班",
"(3)班",
"(5)班",
"(8)班",
"(9)班"]
random.shuffle(cla)
for
x
in
cla:
print(x)
②先构建一个班级的列表cla
=
["(2)班",
"(3)班",
"(5)班",
"(8)班",
"(9)班"],在列表cla中每个班级都对应一个唯一的索引,索引的范围为[0,
4],可以使用random模块的randint函数随机生成5个不重复的整数,生成的整数范围为[0,
4],生成的不重复的整数就是cla随机的索引,通过随机的索引就能得到随机班级的出场顺序。
import
random
cla
=
["(2)班",
"(3)班",
"(5)班",
"(8)班",
"(9)班"]
indexs
=
[]
while
len(indexs)
<
5:
i
=
random.randint(0,
4)
if
i
not
in
indexs:
indexs.append(i)
for
i
in
indexs:
print(cla[i])
③构建一个班级的列表cla
=
["(2)班",
"(3)班",
"(5)班",
"(8)班",
"(9)班"],从这个列表cla中随机的拿出一个元素,放到列表cla2中,重复这个过程直到cla中的元素都被放到cla2中,cla2就是随机班级的出场顺序。
import
random
cla
=
["(2)班",
"(3)班",
"(5)班",
"(8)班",
"(9)班"]
cla2
=
[]
for
i
in
range(1,
5):
p
=
random.choice(cla)
cla.remove(p)
cla2.append(p)
cla2.append(cla[0])
for
x
in
cla2:
print(x)
让学生了解模块导入函数和常数的两种方式,两种导入方式下如何调用模块中的函数和常数,理解模块的功能和应用。
通过实践任务让学生掌握导入模块及模块中函数、常数的使用。进行本节课重点“掌握模块中常数和函数的使用”的教学。
通过编程解决实际问题,进行本节课重点“掌握模块中常数和函数的使用”的教学。该问题的解决要求提供两种方案,这就要求学生充分挖掘random模块中的函数的使用,选择模块中合适的函数来解决问题,在此过程中完成本节课难点“学会利用模块中的常数和函数编写程序解决实际问题”的教学,培养学生的计算思维。在此过程中也培养了学生在合作解决问题的过程中,愿意与团队成员共享信息,实现信息的最大价值的信息意识。
课堂小结
知识梳理:
1.模块的功能及应用。
2.模块的导入方法。
3.模块中常数和函数的使用。
4.利用模块中的常数和函数编写程序解决实际问题。
通过回顾总结帮助学生巩固本节课的学习内容。
作业布置
基础作业(面向所有学生):
本节配套课后作业
提升作业(面向学有余力学生):
通过网络搜索学习自定义模块的相关资料,尝试编写一个判断素数的函数并将这个函数封装到自定义的模块中。
为满足不同层次学生的需求,设置不同难度的作业,巩固本节课学习到的知识,提升作业让学生通过自己编写模块对模块的功能及应用有更深入的了解,也有助于学生进一步了解模块化编程的思想。
教学设计思路
本课内容为模块的导入与应用。模块能够有逻辑地组织Python代码段,它按照代码的用途和分类,将代码分配到不同的模块中。函数封装了实现特定功能的代码,而模块可以有效的将函数组织、保存起来。在编程的过程中引入模块中已经定义好的函数能够简化程序代码,减少程序复杂度。
本课内容更多的侧重是模块的应用,通过应用模块封装的函数和常数编程解决实际问题,建议采用讲授法、任务驱动法、探究法等教学方法。
对于第一次接触模块的学生,模块是一个较为抽象的概念,建议教师通过生活中的具体事例(如:电工的存放工具的工具箱)对比python中模块的功能,让学生理解python中模块的功能。
在学习模块的导入、模块中函数和常数的使用时,建议教师先通过简单的编程实例来讲解模块的导入、模块中函数和常数使用(如:math模块函数的简单编程应用),随后让学生动手实践完成一些较为简单的模块导入、模块中函数和常数应用的问题来掌握模块的导入、模块中函数和常数的应用,并理解模块的应用。
在掌握了模块的导入、模块中函数和常数的使用的基础上,建议教师通过布置一个真实情境的任务(如:教材中的合唱比赛出场顺序问题),在完成该任务时,教师要提供给学生完成该任务可能使用到的模块、模块中的函数和常数的说明,学生通过小组合作、自主探究完成该任务。在完成该任务时,建议让学生能够充分使用模块中的不同函数,提供不同的方案和程序完成该任务,使学生更好的掌握模块。
对于本课的教学重点“掌握模块中常数和函数的使用”主要通过教师布置的一系列任务的完成来进行教学。本课的教学难点“学会利用模块中的常数和函数编写程序解决实际问题”主要通过真实情境任务的编程解决来突破。
针对
核心素养培养的
设计考虑
本节课的主要内容是模块的导入及应用,学生在掌握模块的导入和模块中函数和常数使用的基础上,能够利用模块中的常数和函数编写程序解决实际问题。因此,核心素养的培养主要落在计算思维的培养。在解决实际问题的过程中需要学生合作、探究分享信息共同解决问题,在此过程中也可培养信息意识。
为了培养学生的计算思维,教师在本节课中安排了一个小任务“计算圆面积”和一个真实情境的问题“合唱比赛出场顺序安排”。在解决这两个问题的过程中学生都需要进行需求分析,明确解决问题的关键,设计合理的算法解决这个问题。在解决问题的过程中,某些算法的实现可以通过模块提供的函数实现,教师提供给学生和这个问题解决相关的模块,并给出该模块中函数的相关功能,学生可以根据实际需求和自己设计的算法选择合适的模块和模块中的函数来编写程序解决问题。
本节课信息意识的培养主要落实在解决“合唱比赛出场顺序安排”问题的过程中,学生要通过小组合作、讨论、探究解决该问题的。学生能够在此基础上进行讨论、探究,在此过程中培养合作解决问题的过程中,愿意与团队成员共享信息,实现信息的最大价值的信息意识。