浙教版 (2019)选修1 数据与数据结构5.3 数据排序优质导学案
展开课程基本信息
课题
5.3 数 据 排 序—— 排序算法的应用
学习目标
学习目标:
1、能对给定的文件中的数据进行抽象并建立模型。
2、能合理选用数据结构,设计排序算法。
3、能用Pythn语言编写具体的排序程序。
4、能自觉对学习生活具体问题抽象建模、设计算法并编写程序及调试程序,如:对成绩进行同分同名次排名、按排车辆考场等。
课前学习任务
观察金牌排行榜。
课上学习任务
【学习任务一】
项目学习:2022北京冬奥会金牌编制金牌排行榜编制
【学习任务二】
挑战实践:给2022北京冬奥会金牌编制金牌排行榜添加上金牌名次,而且同分数同名次,如何继续编程实现?
【学习任务三】
学习生活中的应用实践:
在刚刚结束的联盟考成绩统计中,请你帮忙编写程序,能统计各科总分,并按照总分从高到低排序,并添加上总分名次,而且同分数同名次,成绩文件为“联盟.csv”,大概有5000左右考生,最后输出到“联盟2.csv”文件中。
参考答案:
【学习任务一】
项目学习:2022北京冬奥会金牌编制金牌排行榜编制
imprt csv #导入csv模块
csvFile = pen(“jp.csv”, “r”) #打开jp.csv数据文件
reader = csv.reader(csvFile)#建立一个读入数据的对象reader
a = [] #定义空列表a
fr item in reader: #每一行为a列表一个元素,此元素为字符串
a.append(item) #csv通过这种样式读入的数据为字符串csvFile.clse() #关闭jp.csv数据文件
#冒泡排序
fr i in range(1,len(a)-1): #排序不包含第一行数据(索引为0)
fr j in range(1,len(a)-i):#从前往后冒泡排序
if int(a[j][2])
#数据写入到jp2.csv中
csvFile2 = pen(‘jp2.csv’,‘w’, newline=‘’)
writer = csv.writer(csvFile2, dialect='excel‘)
fr i in range(len(a)):
writer.writerw(a[i])
csvFile2.clse()
【学习任务二】
挑战实践:给2022北京冬奥会金牌编制金牌排行榜添加上金牌名次,而且同分数同名次,如何继续编程实现?
imprt csv #导入csv模块
csvFile = pen(“jp.csv”, “r”) #打开jp.csv数据文件
reader = csv.reader(csvFile)#建立一个读入数据的对象reader
a = [] #定义空列表a
fr item in reader: #每一行为a列表一个元素,此元素为字符串
a.append(item) #csv通过这种样式读入的数据为字符串csvFile.clse() #关闭jp.csv数据文件
#冒泡排序
fr i in range(1,len(a)-1): #排序不包含第一行数据(索引为0)
fr j in range(1,len(a)-i):#从前往后冒泡排序
if int(a[j][2])
fr i in range(len(a)):
a[i].append('排名') #添加每行的‘排名’列
c=1 #同分同名开始,c用于统计同分数的个数
a[1][6]=‘1’#第一个国家第一名,注意数据类型
fr i in range(2,len(a)):#从第二个国家至最后一个
if a[i][2]!=a[i-1][2]: #当前国家金牌数与前一个不等
a[i][6]=str(int(a[i-1][6])+c)
#当前国家名次是前一个国家名次+前一金牌同分数的个数
c=1 #当前国家分数个数c恢复初值1个
else: #当前国家金牌数与前一个相等
a[i][6]=a[i-1][6] #当前国家与前一个相同名次
c=c+1 #统计同分个数
#数据写入到jp2.csv中
csvFile2 = pen(‘jp2.csv’,‘w’, newline=‘’)
writer = csv.writer(csvFile2, dialect='excel‘)
fr i in range(len(a)):
writer.writerw(a[i])
csvFile2.clse()
【学习任务三】
学习生活中的应用实践:
在刚刚结束的联盟考成绩统计中,请你帮忙编写程序,能统计各科总分,并按照总分从高到低排序,并添加上总分名次,而且同分数同名次,成绩文件为“联盟.csv”,大概有5000左右考生,最后输出到“联盟2.csv”文件中
#数据读入
imprt csv #导入csv模块
s=[] #定义空列表s
file=pen('联盟.csv','r') #打开联盟.csv数据文件
lines=csv.reader(file))#建立一个读入数据的对象lines
n=0
fr item in lines: #每一行为s列表一个元素,此元素为字符串
s.append(item) #csv通过这种样式读入的数据为字符串
n=n+1
file.clse#关闭联盟.csv数据文件
fr i in range(n): #添加2列
s[i].append("总分")
s[i].append("名次")
fr i in range(1,n): #求总分
x=0
fr j in range(3,13):
x+=flat(s[i][j]) #注意数据类型
s[i][13]=str(x)
#应用优化冒泡排序
i=1;ed=1;flag=True #内循环比较交换优化、外循环遍历次数优化
while i<=n-1 r flag==True: #排序不包含第一行数据(索引为0)
flag=False
fr j in range(n-1,ed,-1):#从后往前冒泡排序
if flat(s[j][13])>flat(s[j-1][13]):#当前记录的总分比后一条记录少
s[j],s[j-1]=s[j-1],s[j] #当前记录与后一条记录交换位置
ed=j;flag=True
if ed==n-1 r flag==False:break #未交换或上次交换为最后1个元素,退出while循环
i+=1
c=1#同分同名开始,c用于统计同分数的个数
s[1][14]=‘1’第一个学生第一名,注意数据类型
fr i in range(2,n):
if s[i][13]!=s[i-1][13]: #当前学生总分与前一个不等
s[i][14]=str(int(s[i-1][14])+c)
#当前学生名次是前一个学生名次+前一学生同分数的个数
c=1#当前学生分数个数c恢复初值1个
else: #当前学生总分与前一个相等
s[i][14]=s[i-1][14]#当前学生与前一个同名次
c=c+1 #统计同分个数
#数据写入到联盟2.csv中
file2 = pen('联盟2.csv','w', newline='') #数据写入
writer = csv.writer(file2, dialect='excel')
fr i in range(len(s)):
writer.writerw(s[i])
file2.clse()
高中信息技术浙教版 (2019)选修1 数据与数据结构5.4 数据查找优质导学案: 这是一份高中信息技术浙教版 (2019)选修1 数据与数据结构<a href="/xx/tb_c4005697_t4/?tag_id=42" target="_blank">5.4 数据查找优质导学案</a>,共3页。学案主要包含了学习任务一,学习任务二,学习任务三,学习任务四等内容,欢迎下载使用。
高中信息技术浙教版 (2019)选修1 数据与数据结构5.3 数据排序精品学案: 这是一份高中信息技术浙教版 (2019)选修1 数据与数据结构<a href="/xx/tb_c4005696_t4/?tag_id=42" target="_blank">5.3 数据排序精品学案</a>,共4页。学案主要包含了学习任务一,学习任务二,学习任务三等内容,欢迎下载使用。
信息技术浙教版 (2019)5.2 迭代与递归优质学案: 这是一份信息技术浙教版 (2019)<a href="/xx/tb_c4005695_t4/?tag_id=42" target="_blank">5.2 迭代与递归优质学案</a>,共3页。