第二单元 微项目4 用排序算法进行数据整理 课件(共17张PPT)-泰山版(2019)初中信息技术第二册

资源下载
  1. 二一教育资源

第二单元 微项目4 用排序算法进行数据整理 课件(共17张PPT)-泰山版(2019)初中信息技术第二册

资源简介

(共17张PPT)
微项目4
用排序算法进行数据整理
Phthon编程------4 排序算法
学习目标
1.通过计算选手得分活动 ,查找最大数、最小数,了解如何进行数据比较 解决如何比较数据大小问题。
2.通过为选手排名次活动, 观察冒泡排序的基本过程,探索序列的生成过程,理解 冒泡排序中的数据交换如何实现。
学习活动 过程与目标 核心问题
学校举行歌手大奖赛,需要设计一个程序,对选手比赛成绩进行处理。比赛规则是满分为10分且评委打分均为整数;每位选手最终得分为去掉1个最高分和1个最低分后的平均分。评委共有12位,参赛选手10位,如何计算并显示所有选手最终得分并排出名次
项目实施
活动一 计算选手得分
活动一
项目实施:——解决生活种的问题
学校举行歌手大奖赛,需要设计一个程序,对选手比赛成绩进行处理。比赛规则是满分为10分且评委打分均为整数;每位选手最终得分为去掉1个最高分和1个最低分后的平均分。评委共有12位,参赛选手10位,如何计算并显示所有选手最终得分并排出名次
问题分析:
首先输入评委打分,
接着通过判断找到最大数、最小数,最后针对有效打分求解平均数,获得选手得分。需要将12位评委打分一次性录人,分数之间用英文逗号分隔。
按Enter键,结束输入。
参照下列代码完成给一个选手的打分录人程序。
1.输入评委打分
#!/usr/bin/env python3
a=input(”输入评委打分,并以英文逗号分隔:").split(",") #输入数值以逗号分隔
b=[int(x) for x in a] #将字符串型的得分转换为数字型数据(整数)并存储
print("评委打分为:",a) #显示未转换类型的数据
print("评委打分为:",b) #显示转换类型后的数据
2.判断最大数、最小数
#!/usr/bin/env python3
a=input("输入评委打分,以英文逗号分隔:").split(",") #输入得分数值以逗号分隔
b = [int(x) for xin a] #将输入的字符串型得分转换为数字型数据(整数)并存储
d=b[0]
for i in b: #访问列表中所有数值进行判断
if i>d:
d=i
print("最大数为",d)
找最大数
问题:通过对列表中数据进行逐个判断,找出最大数和最小数。下面代码初始化最大数变量d为第1个元素,通过循环访问整个列表,最终找出最大数。
3.计算选手平均分
根据规则,从所有评委打分之和中减去最高分与最低分,然后除以有效打分个数求得该选手的最终得分。
#!/usr/bin/env python3
a=input("输入评委打分以英文逗号分隔:").split(",")
b=[int(x) for xin a]
d=b[0]
x=b[0]
for i in b: # 遍历列表中所有数值进行判断
if i>d:
d=i
if ix=i
m=sum(b)-d-x#求和,并减去最高分、最低分
n=len(b)-2 #求有效分的个数
k=m/n # 求平均
print("选手得分:",b)
print("去掉一个最高分:",d)
print("去掉一个最低分:",x)
print("最终平均得分:",k)
活动一 为选手排名次
活动二
解决问题:
按照得分高则名次靠前的原则,需要将10位选手的最终得分按照从高到低进行排序。计算机如何完成对选手成绩的排序呢
在程序设计中,冒泡排序是比较常见的一种排序算法。下面,一起来探究该算法的实现过程。
1.冒泡排序算法的执行过程
1.冒泡排序算法的执行过程
所谓冒泡排序,就是从初始位置开始,每次对相邻两个数据进行比较,如顺序无误保持位置不变,顺序错误则交换位置,不断进行下一次比较,直至数据顺序调整完毕。
7
9
5
6
4
7
9
5
6
4
7
5
9
6
4
7
5
6
9
4
7
5
6
4
9
7
5
6
4
9
5
7
6
4
9
5
6
7
4
9
5
6
4
7
9
5
6
4
7
9
原始数据
第1次比较后
第2次比较后
第3次比较后
第4次比较后
第1次比较后
第2次比较后
第3次比较后
第4次比较后
从第1轮比较结果开始
第1轮比较
第2轮比较
(1)观察冒泡排序的基本过程
第1轮如何比较?
第2轮如何比较?
讨论:
如何进行第三轮比较呢?
以对7、9、5、6、4从小到大排序为例,我们先尝试两轮冒泡排序过程
根据前两轮排序过程,推演冒泡排序的全部过程。
(2)分析冒泡排序的基本规律
讨论:
n个数进行冒泡排序,除第一轮比较外,每轮比较需要n-1次吗?
一共需要比较多少轮?
2.编写冒泡排序程序进行实验——双重循环
通过使用双重循环,很容易实现冒泡排序的程序设计:
用外层循环控制比较轮次,用内层循环控制每轮内的数据比较次数;
每次比较后可显示比较结果,每轮比较后显示当前结果。
通过排序实验的过程数据,会直观地看出整个冒泡排序的过程。实验中,可用“#”临时屏蔽每次比较后的结果显示,直观观察所有轮次的比较过程。
#!/usr/bin/env python3
#冒泡排序实验
#9个测试数据存储在s[0]-s[8]
s=[9,8,7,6,5,4,3,2,1]
print(”参与排序的数据:", s)
for k in range(0,len(s)-1): #控制比较轮数
for i in range(0,len(s)-k-1): #每轮比较次数
if s[i]>s[i+1]: #判断相邻两数值的大小
s[i],s[i+1]=s[i+1],s[i] #符合判断条件情况,交换位置
print("第",i+1,"次比较结果:"s) #显示比较过程
print("第",k+1,"轮比较结果:",s )#显示当前结果
print()
讨论:
1.用测试数据运行程序有什么好处
2.如何删除测试数据,为选手得分排序
双重循环 —— 程序实现
3.用冒泡排序的降序方式为选手成绩排序
#!/usr/bin/env python3
s=[5.3,6.0,4.1,7.5,9.6,4.7.7.2,8.6,6.3.9.2]#选手成绩列表
for k in range(0,len(s)-1):
for i in range(len(s)-k-1):
If s[i]s[i],s[i+1]=s[i+1].s[i] #小数交换到后面位置
print("成绩从高到低排序结果:",s)
冒泡排序不仅可以升序排序,通过修改比较运算符,还可以进行降序排序。参考以下程序,请对选手成绩从高到低进行排序。
在程序中:
①在Python中,s[i],s[i+1]=s[i+1],s[i]语句直接完成变量值的交换,不用第三个变量。
② print("第%d名得分:%.2f 选手:%s”%(i+1,s[i],c[i]))语句中采用了输出格式的设置。
%f;输出对应的浮点数,%.2f是保留2位小数。本程序在执行时%.2f对应输出s[ī]。
%s:输出对应的字符串。本程序在执行时%s对应输出c[i]。
4.同时交换选手编号与得分
仅对分数排序,无法区分是哪位选手的成绩。使用列表c辅助,可以实现编号与得分对应,符合交换条件时同步交换,从而能够确定某位选手的具体得分和位次。
m!/usr/binfeny python
s=[5.3,6.0,4.1,7.5,9.6,4. 7,7.2,8.6,6.3,9.2]#选手成绩列表
c=[“001”,”002”,” 003” ,”004,””005”,”006”,”007”,“008”,”009”]#选于编号
for k in range(O,len(s)-1)
for i in range(len(s)-k-1):
if s[i]s[1].s[1+1]**[1+1].s[0
c[i].c[i-]]*c[i+1].c[i] x编号网修交换
for i in range(0,len(s)):
print(“第%d名 得分:%.2f 选手:%s” %(i+1,s[1],cti]))
编号对应程序
讨论
1.如有相同得分,如何显示并列名次
2. 将排序、编号对应的两个程序连续起来,如何修改可以完成10位选手的成绩录入和排序工作
课堂小结:
排序算法的思想是什么?
升序和降序是如何在排序算法中实现的

展开更多......

收起↑

资源预览