资源简介 (共17张PPT)微项目4用排序算法进行数据整理Phthon编程------4 排序算法学习目标1.通过计算选手得分活动 ,查找最大数、最小数,了解如何进行数据比较 解决如何比较数据大小问题。2.通过为选手排名次活动, 观察冒泡排序的基本过程,探索序列的生成过程,理解 冒泡排序中的数据交换如何实现。学习活动 过程与目标 核心问题学校举行歌手大奖赛,需要设计一个程序,对选手比赛成绩进行处理。比赛规则是满分为10分且评委打分均为整数;每位选手最终得分为去掉1个最高分和1个最低分后的平均分。评委共有12位,参赛选手10位,如何计算并显示所有选手最终得分并排出名次 项目实施活动一 计算选手得分活动一项目实施:——解决生活种的问题学校举行歌手大奖赛,需要设计一个程序,对选手比赛成绩进行处理。比赛规则是满分为10分且评委打分均为整数;每位选手最终得分为去掉1个最高分和1个最低分后的平均分。评委共有12位,参赛选手10位,如何计算并显示所有选手最终得分并排出名次 问题分析:首先输入评委打分,接着通过判断找到最大数、最小数,最后针对有效打分求解平均数,获得选手得分。需要将12位评委打分一次性录人,分数之间用英文逗号分隔。按Enter键,结束输入。参照下列代码完成给一个选手的打分录人程序。1.输入评委打分#!/usr/bin/env python3a=input(”输入评委打分,并以英文逗号分隔:").split(",") #输入数值以逗号分隔b=[int(x) for x in a] #将字符串型的得分转换为数字型数据(整数)并存储print("评委打分为:",a) #显示未转换类型的数据print("评委打分为:",b) #显示转换类型后的数据2.判断最大数、最小数#!/usr/bin/env python3a=input("输入评委打分,以英文逗号分隔:").split(",") #输入得分数值以逗号分隔b = [int(x) for xin a] #将输入的字符串型得分转换为数字型数据(整数)并存储d=b[0]for i in b: #访问列表中所有数值进行判断if i>d:d=iprint("最大数为",d)找最大数问题:通过对列表中数据进行逐个判断,找出最大数和最小数。下面代码初始化最大数变量d为第1个元素,通过循环访问整个列表,最终找出最大数。3.计算选手平均分根据规则,从所有评委打分之和中减去最高分与最低分,然后除以有效打分个数求得该选手的最终得分。#!/usr/bin/env python3a=input("输入评委打分以英文逗号分隔:").split(",")b=[int(x) for xin a]d=b[0]x=b[0]for i in b: # 遍历列表中所有数值进行判断if i>d:d=iif ix=im=sum(b)-d-x#求和,并减去最高分、最低分n=len(b)-2 #求有效分的个数k=m/n # 求平均print("选手得分:",b)print("去掉一个最高分:",d)print("去掉一个最低分:",x)print("最终平均得分:",k)活动一 为选手排名次活动二解决问题:按照得分高则名次靠前的原则,需要将10位选手的最终得分按照从高到低进行排序。计算机如何完成对选手成绩的排序呢 在程序设计中,冒泡排序是比较常见的一种排序算法。下面,一起来探究该算法的实现过程。1.冒泡排序算法的执行过程1.冒泡排序算法的执行过程所谓冒泡排序,就是从初始位置开始,每次对相邻两个数据进行比较,如顺序无误保持位置不变,顺序错误则交换位置,不断进行下一次比较,直至数据顺序调整完毕。79564795647596475694756497564957649567495647956479原始数据第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 python3s=[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[0c[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位选手的成绩录入和排序工作 课堂小结:排序算法的思想是什么?升序和降序是如何在排序算法中实现的 展开更多...... 收起↑ 资源预览