9 列表、元组和字典
一、学习目标
1.认识列表、元组和字典的数据结构,明白它们之间的联系和区别。
2.学会列表、元组和字典的定义和调用,掌握简单的操作函数。
3.在程序设计中根据需要,灵活使用列表、元组和字典表达、处理数据。
4.学会冒泡排序法的算法。
二、教学重、难点
教学重点:对列表的引用、排序、插入、删除等操作。
教学难点:列表、元组和字典的区别和使用场景。
三、教具准备
安装有python3.6的计算机
四、教学设计
环节名称
活动设计(任务、步骤、要求、成果)
设计意图
反思
第一环节
生活发现
1、生活情境
“五岳归来不看山,黄山归来不看岳”,三山五岳乃是我国境内的名山,以其优美的风景、险峻雄奇的气势征服了众多的国内外游客,你们有没有去旅游过呢?现在知道泰山海拔1545米、华山海拔2154.9米、衡山海拔1300.2米、恒山海拔2016.1米、嵩山海拔1491.71米,你们能不能用出五岳中最高的是那一座,最矮的是那一座,平均海拔高度是多少呢?如果给你更多的山峰海拔,比如全国所有高峰的海拔或者全球所有高峰的海拔,你还能不能快速的到呢?
2、问题提出
引导策略:引导学生把特殊数据扩展到一般数据。
如:更多的山、更多数据的集合等。
1.讨论问题
1)怎么求最大值和最小值?
2)怎样求平均值?
3)有没有更加方便的方法实现上面的计算?
引导策略:引导学生将众多数据合成一个整体思考。
如:如果把所有的山看作一个整体并用统一的方法来处理,是不是更加方便?
2.生成问题
1)能否用循环语句配合分支语句来求解?
2)循环语句计算的具体算法是什么?
3)如果能将五座山的高度集合成一个整体进行计算是否会更加好理解?
4)对一组聚合在一起的数据能够进行哪些操作?
3、我的设想
(小组讨论____分钟)
1.小组代表发言,汇报自己小组想出来的有价值的问题
2.组间进行评价,讨论算法的可行性和。
第二环节庖丁解牛
  引导策略:首先肯定学生所讨论问题,然后让学生结合已有知识能否解决,引导需要学习本堂内容能够快速解决以上问题。
如:刚才同学们讨论的几个问题很有意义,如果使用循环语句来解决问题完全可以,但是代码量会比较大,算法也更复杂。我们首先试着用循环语句来解决,在学完本课内容后就可以非常简单的解决该问题了。
我们之前学习过变量、for循环、while循环还有if分支语句,合理的应用不同的语句结构都可以解决本问题,下面分组使用自己设计的不同算法来试着解决。
1、使用变量和循环、分支语句实现算法
步骤1 画出流程图
    磨刀不误砍柴工,在编写代码之前绘制流程图可以帮助我们理清逻辑结构、明确思路。
1.for循环流程图
2.while循环流程图
步骤2编写代码
分组合作编写代码
代码截图:
1for循环
2while循环
步骤3运行调试
1.调试运行,遇到疑问组内讨论,调试完成后小组间比较结果。
2.函数float()的作用?
3.为什么imaximin不能直接用maxmin
二、使用列表来解决五岳问题
步骤1认识列表
列表(list)是包含0到多个对象引用的序列。列表的定义使用“[]”把数据括起来,其中的每一个数据(称作元素)用“,”隔开。列表内可以包含任何数据类型,比如数字、字符串,同一个列表也可以包含不同数据类型。
小练习:将五岳的高度存放到一个列表中,并打印列表。
步骤2调用列表元素
调用列表中某一个元素,需要使用列表的下标,列表的下标从0开始,因此第1个元素就是height[0]
小练习:用print函数打印输出height列表中第1和第3个元素。
步骤3遍历列表
通常用for循环遍历height列表的数据。
小练习:打印显示每个元素的值。
小组讨论
1i在每次循环时的值是多少?
2、若要求得列表中所有元素的和,代码该如何编写?
步骤4列表的排序
可以使用sort( )函数对列表进行排序。
小练习:将五岳列表按照高度从小到大排序。
对列表而言还有count()index()reverse()等函数可以进行排序和统计,请同学们试验一下这几个函数的作用。
步骤5结合以上所学用列表的方式实现五岳问题
1、结合排序和元素调用可以得出最大值和最小值。
2、通过for循环遍历列表可以计算列表的和。
3、分组进行设计,要设计流程图,完成后进行分享评价。
流程图:
快速排序python实现
代码截图:
引导策略:引导学生注意排序算法和遍历列表的方法。
如:你能试着使用循环语句来实现列表数据的排序吗,有几种算法,那种更快?
步骤6列表的操作
可以用命令和函数对列表进行添加、删除和插入等操作。
1、添加
使用append()函数在列表末尾添加一个元素
示例:height.append(1864.8)
作用:在列表的末尾再添加一个元素1864.8(黄山海拔)。
2、删除
a.使用del保留字删除某一个元素。
del height[0]
删除了列表的第一项。
b.使用pop()函数删除某一个元素。
height.pop(0)
删除了列表的第一项,与a相同。
C.使用remove()函数删除特定内容的元素
ve(1545)
删除数值为1545的元素
3、插入
使用insert()函数在列表中插入一个元素
height.insert(4, 1864.8)
结果对照:
[1545, 2154.9, 1300.2, 2016.1, 1491.71]      #操作前列表
[1545, 2154.9, 1300.2, 2016.1, 1864.8, 1491.71]#操作后列表
步骤7列表操作综合练习
使用列表的操作方法在列表中加上三山的海拔(黄山:1864.8米、庐山:1473.8米、雁荡山:1056.5),并计算三山五岳的最高海拔、最低海拔和平均海拔。
小组讨论先画出流程图,再进行代码修改和调试。
流程图:
代码截图:
思考:本程序还有什么缺点,应该怎样改进?
步骤8sort()函数的算法实现
引导策略:引导学生理解冒泡排序算法和快速排序法。
如:假设给你一副扑克让你从小到大排序,应该怎么做呢?
1、 冒泡排序法
冒泡排序法是计算机进行排序时经常用到的算法。在排序时先比较前两个数据,如果第一个数较大则交换两个数,否则不变,再继续比较第二个和第三个把最大的放到后面,以此类推最后整个列表的最后一个数就是最大的,就像气泡向上冒一样。继续将前面的数据再按冒泡法排序最后就将整个数据列表排好了数据。
以五岳的数据为例,第一轮
1545
2154.9
1300.2
2016.1
1491.71
原始数据
1545
2154.9
1300.2
2016.1
1491.71
交换12
1545
1300.2
2154.9
2016.1
1491.71
交换23
1545
1300.2
2016.1
2154.9
1491.71
交换34
1545
1300.2
2016.1
1491.71
2154.9
交换45
可以看到最大的2154.9逐渐的从前移动到了最后。
思考:
a.n个数字第一轮排序需要进行几次交换,为什么?(n-1次)
b.n个数字需要几轮交换,每轮需要进行几次交换,为什么(n-1轮,每轮交换比上一轮少一次)
代码示例:
思考:
交换两个数的值有哪些方法,各有哪些优缺点?
1、借助第三个变量;2、不借助第三变量;3、使用python运算符(inum[j],inum[j+1]=inum[j+1],inum[j]))
2、 算法的优化
冒泡排序法比较容易理解但是在数据量很大的情况需要的步数非常多,n个数需要进行(n+1*n+1)次运算,假设有1亿个数进行排序需要多少步运算?
为了解决冒泡排序法的这个缺点,我们可以对排序算法进行优化,比如使用更快的快速排序法。
3、 快速排序法
快速排序法是对冒泡排序法的一种改进。它的基本思想是:
1、 把一组需要排序的数据分成两部分,让其中一部分的所有数据都比另一部分的所有的数据小。
2、 按第1步方法对这两部分数据分别进行多次快速排序,直到完全将数据按要求排序。
3、 快速排序算法,简称快排,是最实用的排序算法,没有之一,各大语言标准库的排序函数也基本都是基于快排实现的。要用python写出快速排序算法的代码,需要用到函数的递归,请自行获取相关资料尝试编写代码。
三、元组的使用
步骤1认识元组
    元组(tuple)可以理解为一个不可修改的列表,在定义时与列表也相似,不同的地方在于列表使用“[ ]”,而元组使用“( )”。
步骤2元组的操作
    将上面计算三山五岳的代码中的列表修改成元组,并测试代码,看  看有哪些操作无法进行,并总结出元组和列表的不同之处。
append()函数无法使用
sort()函数无法使用
再次测试和列表相关的命令(del)和函数,看看有何区别?
    结论:所有视图修改元组的命令和函数均无法使用,其余列表可以使用的函数元组也可以使用。
步骤3思考元组用处
根据元组的特点,思考在编写程序时有哪些场景可以使用元组?
四、字典
步骤1认识字典
  字典的定义用“{}”把数据括起来,其中每一个元素由键(key)和值(value)组成,键和值之间用英文冒号“:”分开,两者是一种映射关系,在这些元素中,键是唯一的,不可重复。
Height={1545 :"泰山", 2154.9: "华山",1300.2:"衡山", 2016.1:"恒山", 1491.71:"嵩山"}
步骤2字典的使用
  字典主要用于查与特定键所对应的值,通过“键”来调用”值”,字典中的元素没有固定的顺序,所以不能用下标来表示元素。
正确:print(height[1545])
错误:print(height[0])
步骤3字典的修改
添加操作
height[1864.8]="黄山"
删除操作
del height[1864.8]
请学生亲手操作一下,观察字典的操作和列表的操作有什么不同。
步骤4字典应用
使用字典和列表修改上面的五岳程序,使其最后显示具体的山名
思考:使五岳程序显示结果不是数字而是山名,有哪些实现方法,不用字典能不能实现,使用字典又如何实现?
参考代码:
a.不用字典
b.使用字典
第三环节
学以致用
1、创意研究
引导策略:引导学生将现实生活中成组的数据和本课内容联系起来。
如:以上我们学习了列表、元组和字典的相关知识,大家想一想我们生活中有很多需要成组数据的地方,比如课程表、日历等,请思考还有那些类似的应用场景?每个小组讨论**分钟,设计一个使用它们的程序。   
1.程序名称。
2.为什么要写这个程序,用来解决哪些实际问题?(通讯簿、成绩单、价格表等)
2、合作交流
引导策略:教师出示课件或文字说明小组需要完成的内容。
如:小组讨论,根据小组确定的方案,确定算法,并画出流程图,讨论代码并完成编写并运行。
要求:
1.各组讨论并确定程序内容。
2.讨论、绘制流程图
3. 编程调试,要有专人记录出现的问题和灵感创意。
3、快乐分享
引导策略:教师出示课件或文字说明小组需要汇报的内容。
每个小组向全班汇报方案完成情况,同时把完善后的算法步骤、流程图、编码及运行结果出示给大家,进行展示评价。
第四环节
收获展望
1、我的收获
通过本节课的学习,你有哪些收获?和大家一起分享一下吧!
(对列表、元组、字典的理解,使用它们能解决哪些问题,都有哪些命令和函数可以使用等。)
评价项目
同伴评价
我的评价
认识列表、元组和字典的特点
学会列表、元组和字典的定义和调用
掌握列表、元组和字典的常用操作
2、拓展延伸
1、通过本课学习结合以前所掌握的知识,同学们已经可以编写非常强大的程序,请查阅资料(图书、网络等)进一步了解列表、元组、字典的更多使用方法并发挥创意设计一个具有较完整功能的程序。
1.了解更多的函数,知道更多对列表、元组、字典的操作方法,想想每个函数都是通过什么算法来实现的?
2.记录一个完整程序的创意,应具有退出、修改、查询等功能。
3.记录每个模块都用到哪些知识。
4.画出流程草图(只画大模块)。
2、集合(set
    集合与数学中的概念类似,用于表示数据的无序集合,集合中的元素不可重复,元素的类型只能是固定类型,如整数、浮点数、字符串和元组等,列表和字典因其可变性,所以不可作为集合的元素。
创建格式:
parame = {value01,value02,...}
或者
set(value)
集合基本的操作:交集(&)、并集(|)、差集(-)、补集(^),计算方法与数学中集合的方法相同。
三、教学设计
视频设计:5段微视频
1、最大值和最小值算法 
2、认识列表
3、冒泡排序算法
4、认识元组
5、认识字典

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。