“奥运排行榜”教学思路 最新
来源:程序员客栈     时间:2023-02-27 15:56:32

说在前面

“奥运排行榜”是一个源于实际的排序问题,每个国家的信息是一条记录,包含编号、国家/地区、人口数量、各奖牌数等数据项,根据不同的排序标准,对各条记录进行排序。


(资料图片仅供参考)

教材程序采用一个二维数组来存储数据,每个元素表示一条记录,排序时可以对整条记录进行交换操作。教材还提供了“思考与练习”,继续研究不同数据结构和排序要求下,冒泡排序的不同实现方法,要求学生理解数据结构与算法的关系,值得深入探讨。

教材文本

教材处理

教材程序首先读取csv文件,再逐行将数据插入到二维数组a中,数组a的每个元素都是一个字符串列表,例如a[1]的值为["8", "中国", "136407", "51", "21", "28", "100"]。

程序在执行冒泡排序时,以金牌数为关键字进行降序排序,故需要先使用int()函数将a[j][3]转换成整数,再作比较。

因为a[0]的值是标题,所以不参与排序,这虽然能够解决问题,但造成了隐患,最好是不要把标题存储到a中,这样排序时就可以放心大胆地套用代码模板了。可以引导学生自行编程解决奥运排行榜问题,并比较其与教材程序的异同。

学生任务单

阅读教材P132例1“奥运排行榜”,思考如下问题:

(1)教材程序中变量a是何种数据结构?其元素值(例如a[3])是什么数据类型?

(2)教材程序是如何对数组a排序的?a[0]是否参与的排序?为什么?

(3)下列程序也能解决奥运排行榜问题,试比较其与教材程序的异同,并完成填空。

import csv

#数据读入

csvFile = open("jp.csv", "r") #打开相应数据文件

reader = list(csv.reader(csvFile)) # 转换成列表,以便跳过第一行

a = []

for item in reader[1:]:

a.append(item)

csvFile.close()

#排序

for i in range(1,len(a)):

for j in range(填空1):

if 填空2:

a[j], a[j+1] = 填空3

#数据写入

csvFile2 = open("jp2.csv","w", newline="")

writer = csv.writer(csvFile2, dialect="excel")

writer.writerow(reader[0]) #先写入标题

for i in a:

writer.writerow(填空4)

csvFile2.close()

(4)书中程序采用1个二维数组来存储数据,若改成以7个一维数组来存储数据,又该如何编程实现以金牌数为关键字进行降序排序功能?

参考代码如下,请将缺失的代码补充完整。

import csv

#数据读入

csvFile = open("jp.csv", "r") #打开相应数据文件

reader = list(csv.reader(csvFile)) #转换成列表,以便跳过第一行

a1 = [item[0] for item in reader[1:]] #编号

a2 = [填空1] #国家/地区

a3 = [item[2] for item in reader[1:]] #人口数量

a4 = [item[3] for item in reader[1:]] #金牌

a5 = [item[4] for item in reader[1:]] #银牌

a6 = [item[5] for item in reader[1:]] #铜牌

a7 = [填空2] #总数

#排序

for i in range(1,len(a1)):

for j in range(len(a1) - i):

if int(a4[j]) < int(a4[j+1]):

填空3(包含多行语句)

#数据写入

csvFile2 = open("jp2.csv","w", newline="")

writer = csv.writer(csvFile2, dialect="excel")

writer.writerow(reader[0]) #先写入标题

for i in range(len(a1)):

writer.writerow(填空4)

csvFile2.close()

(5)依然采用1个二维数组来存储数据,若将排序关键字改为“国民人均奖牌数”,并按升序排序,该如何编程实现以金牌数为关键字进行降序排序功能?

问题解析

(1)a是一个二维数组,其元素值是一个字符串数组,其中a[3]的值为["53", "美国", "32262", "36", "38", "36", "110"],a[3][3]也是一个字符串,可以使用int(a[3][3])将其转换成整数,表示金牌数量。

(2)书中程序采用冒泡排序算法,以金牌数为关键字,对数组a进行降序排序。因为a[0]存储的是标题,故不参与排序。程序的内层循环从下标1开始遍历数组,这样可以跳过a[0]。

(3)填空1:len(a) - i;

填空2:int(a[j][3]) < int(a[j+1][3]);

填空3:a[j+1], a[j];

填空4:i。

(4)填空1:item[1] for item in reader[1:];

填空2:item[1] for item in reader[1:];

填空3: a1[j], a1[j+1] = a1[j+1], a1[j]

a2[j], a2[j+1] = a2[j+1], a2[j]

a3[j], a3[j+1] = a3[j+1], a3[j]

a4[j], a4[j+1] = a4[j+1], a4[j]

a5[j], a5[j+1] = a5[j+1], a5[j]

a6[j], a6[j+1] = a6[j+1], a6[j]

a7[j], a7[j+1] = a7[j+1], a7[j]

填空4:[a1[i],a2[i],a3[i],a4[i],a5[i],a6[i],a7[i]]。

(5)参考代码如下:

import csv

#数据读入

csvFile = open("jp.csv", "r") #打开相应数据文件

reader = list(csv.reader(csvFile)) # 转换成列表,以便跳过第一行

a = []

for item in reader[1:]:

a.append(item)

csvFile.close()

#排序:关键字“国民人均奖牌数”,按升序排序

for i in range(1,len(a)):

for j in range(len(a) - i):

if int(a[j][6])/int(a[j][2]) > int(a[j+1][6])/int(a[j+1][2]):

a[j], a[j+1] = a[j+1], a[j]

#数据写入

csvFile2 = open("jp2.csv","w", newline="")

writer = csv.writer(csvFile2, dialect="excel")

writer.writerow(reader[0]) #先写入标题

for i in a:

writer.writerow(i)

csvFile2.close()

课后作业

任务(4)以7个一维数组来存储数据,当以金牌数为关键字进行降序排序时,不仅是对a4排序,其他6个数组的元素值也要相应变化,效率不高。因为这7个数组的结构一致,相同下标对应同一个国家,故我们可以增加一个索引数组b,专门用来存储这7个数组的下标,这样只需对索引数组b排序,数组a1-a7可以保持不变。输出数组元素时,只要设置正确的索引值,就能实现排序的效果。

这种排序方法被称为“索引排序”,参考代码如下,请将缺失的代码补充完整。

import csv

#数据读入

csvFile = open("jp.csv", "r") #打开相应数据文件

reader = list(csv.reader(csvFile)) #转换成列表,以便跳过第一行

a1 = [item[0] for item in reader[1:]] #编号

a2 = [填空1] #国家/地区

a3 = [item[2] for item in reader[1:]] #人口数量

a4 = [item[3] for item in reader[1:]] #金牌

a5 = [item[4] for item in reader[1:]] #银牌

a6 = [item[5] for item in reader[1:]] #铜牌

a7 = [填空2] #总数

b = [i for i in range(len(a1))] #设置索引数组

#排序

for i in range(1,len(a1)):

for j in range(len(a1) - i):

if int(a4[b[j]]) < int(a4[b[j+1]]):

填空3

#数据写入

csvFile2 = open("jp2.csv","w", newline="")

writer = csv.writer(csvFile2, dialect="excel")

writer.writerow(reader[0]) #先写入标题

for i in range(len(a1)):

writer.writerow(填空4)

csvFile2.close()

需要本文word文档、源代码和课后思考答案的,可以加入“Python算法之旅”知识星球参与讨论和下载文件,“Python算法之旅”知识星球汇集了数量众多的同好,更多有趣的话题在这里讨论,更多有用的资料在这里分享。

我们专注Python算法,感兴趣就一起来!

相关优秀文章:

阅读代码和写更好的代码

最有效的学习方式

Python算法之旅文章分类

关键词: 存储数据 降序排序 数据文件

新闻推荐
  • “奥运排行榜”教学思路 最新

    说在前面“奥运排行榜”是一个源于实际的排序问题,每个国家的信息是一条记录,包含编号、国家 地区、人口数量、各奖牌数等数据项,根据不同的

    来源:程序员客栈      时间:2023-02-27 15:56:32
  • 梵音瑜伽多家公司因劳动争议被起诉 全球信息

    近日,知名瑜伽连锁机构梵音被曝拖欠员工工资,不少门店闭馆停业,消费者退费困难。对此,梵音瑜伽老板今日发文宣布停业整顿,并

    来源:程序员客栈      时间:2023-02-27 13:56:35
  • 夜生活之曲有多少任务_夜生活之曲

    1、《侠盗猎车4:夜生活之曲》图文攻略游戏贴士:第一次进行游戏,过场动画建议不要按空格键跳过。2、避免出现BUG卡在LO

    来源:程序员客栈      时间:2023-02-27 12:17:46
  • 环球快资讯丨43股获20家以上机构调研 苏文电能最受关注

    数据宝统计,近5个交易日(2月20日至2月24日)沪深两市约250家上市公司被机构调研。机构调研榜单中,共有43家公司获20家以上机构扎堆调研。苏文

    来源:程序员客栈      时间:2023-02-27 11:46:00
  • 经济日报丨灯光下升腾烟火气 世界今亮点

    谢瑶灯火璀璨的店铺、琳琅满目的商品、熙熙攘攘的人流……今年以来,湖南“夜经济”热度持续攀升。2月18日,在长沙市开福区四

    来源:程序员客栈      时间:2023-02-27 09:48:58
  • 本周气温呈回暖趋势,申城今年入春或提前

    回暖,是本周申城天气的主旋律。根据上海中心气象台发布的数据,未来10天,本市气温将呈上升趋势,体感比之前暖和不少,最高气温维持在13℃至1

    来源:程序员客栈      时间:2023-02-27 08:13:05
  • 水云间 世界热议

    1、《水云间》是凤凰传奇演唱的一首歌曲,由于瑞洋作词作曲,收录在凤凰传奇2014年发行的专辑《最好的时代》中。2、201

    来源:程序员客栈      时间:2023-02-27 06:53:49
  • 停车位占道 骑车人难行 快看

    本文转自:北京日报官悦欣园北侧新建路停车位占道骑车人难行官悦欣园北侧,停车位与隔离护栏间的距离过近。家住朝阳区王四营官悦欣园B区的袁先

    来源:程序员客栈      时间:2023-02-27 03:56:24
  • 02月26日从宁波出发到黄山的防疫政策 世界观焦点

    02月26日从宁波出发到黄山的防疫政策(数据来源:本地宝)1、出宁波-:正常通行2、到黄山-:除养老院、福利院、医疗机构

    来源:程序员客栈      时间:2023-02-26 22:58:43
  • 今亮点!陈述性知识

    1、陈述性知识,也叫“描述性知识”。2、它是指个人具有有意识的提取线索,而能直接加以回忆和陈述的知识。3、主要是用来说明

    来源:程序员客栈      时间:2023-02-26 21:09:30
  • 巨轮_说一说巨轮的简介

    夏弥来为大家解答以下的问题,巨轮,说一说巨轮的简介,现在让我们一起来看看吧!1、《巨轮》(英语:Brother sKe

    来源:程序员客栈      时间:2023-02-26 19:48:47
  • 百亿私募掀调研热!13只票获超100家机构调研 这3只票成“香饽饽”!明星私募密集发新产品-环球百事通

    春节之后,随着市场情绪的回暖以及疫情的逐渐褪去,机构投资者掀起了一轮“调研热”,尤其是线下调研迎来重启,部分个股接受数十家机构现场扎

    来源:程序员客栈      时间:2023-02-26 16:46:12
  • 今日报丨鲍丹

    1、鲍丹(BardieBao),1991年2月8日出生于安徽省宣城市,中国内地女演员、歌手,毕业于深圳大学师范学院艺术

    来源:程序员客栈      时间:2023-02-26 15:52:50
  • 今日聚焦!桌面日历软件哪个好_4款桌面日历软件下载推荐

    1 桌面桌面日历Desktopcal桌面日历是一款专门为桌面设计的桌面工具。桌面Cal桌面日历帮助您轻松管理桌面上的约会

    来源:程序员客栈      时间:2023-02-26 13:23:34
  • 每日动态!中华国学经典:儒林外史

    1、《中华国学经典:儒林外史》是2019年8月团结出版社出版的图书。2、作者是吴敬梓(清)。文章到此就分享结束,希望

    来源:程序员客栈      时间:2023-02-26 10:23:03
  • 2022环粤港澳大湾区城市自行车挑战赛江门恩平站鸣枪

    2022环粤港澳大湾区城市自行车挑战赛江门恩平站鸣枪

    来源:程序员客栈      时间:2023-02-26 09:57:54
  • 当前速看:02月26日06时湖北荆门昨日累计报告阳性感染者确诊971例 怎么判断自己是否属于轻型感染者

    新型冠状病毒传播性强,不侥幸,不冒险,情谊常在,聚会不急一时。02月26日06时湖北荆门昨日累计报告阳性感染者确诊971例怎么判断自己是否属于

    来源:程序员客栈      时间:2023-02-26 07:11:48
  • 焦作十一中 快讯

    1、焦作市第十一中学,创建于1962年,位于焦作市学生路中段。2、2003年被焦作市教育局评估为首批市级示范性普通高中,

    来源:程序员客栈      时间:2023-02-26 04:44:32
  • 四书是哪四书五经是哪五经_四书是哪四书

    1、《大学》主条目:大学《大学》原本是《礼记》中一篇,在南宋前从未单独刊印。2、传为孔子弟子曾参(前505年—前43

    来源:程序员客栈      时间:2023-02-26 01:54:21
  • 能否延续?利物浦近7次英超客战水晶宫全胜,总比分22-6-播资讯

    英超第25轮,利物浦将客战水晶宫,利物浦最近7次英超客战水晶宫全部取胜,总比分为22-6。最近7次英超客战水晶宫,利物浦全部取胜,期间打入22

    来源:程序员客栈      时间:2023-02-25 20:17:33