Skip to content

第9周:第六次上机课(详细讲义) ​

课堂版 · py 作业 6 · OJ 题集

py 作业 6 逐题讲解 ​

01 · 列表练习 ​

OpenJudge 原题 · 作业页面

题目要求的操作按顺序作用在同一个列表上。位置从 1 开始,下标从 0 开始;打印时应展示每一步修改后的列表。

步骤列表
原列表[4, 0, 5, 6]
在第 2 个位置插入 8[4, 8, 0, 5, 6]
删除第 1 个位置[8, 0, 5, 6]
删除第 1~3 个位置[6]

判断 0 是否存在,应针对第三步后的列表。删除前三项可用切片,但要留意切片右端不包含。

课堂追问: 原列表恰好 3 项时,插入后再连续删除,能否出现空列表?何时求最大值?

展开思考

可以。删除后可能为空,但题目随后要求先添加 y,再求最大值;不要在添加之前对空列表求最大值。

本题答案暂未公开

北京时间 2026/11/09 00:00:00 解锁

1 天 13 小时 16 分 49 秒

正在载入加密答案…

02 · 校门外的树 ​

OpenJudge 原题 · 作业页面

长度为 L 的马路有 0、1、…、L 共 L+1 个位置。用下标代表位置,初始都标为有树;每读入一个移除区间,把两端及中间位置标为无树。

L=8,区间 [1,3]、[3,5] 合起来移走位置 1 到 5,剩下 0、6、7、8,共 4 棵。重叠部分再次标记仍然只是无树,不会重复扣减。

课堂追问: 为什么 range(1, 3) 不能处理整个 [1,3]?位置 0 和 L 能被移除吗?

展开思考

range 的右端不包含 3,因此要让停止位置再往后一个;位置 0 和 L 也在马路上,只要落在移除区间中就要标记。

本题答案暂未公开

北京时间 2026/11/09 00:00:00 解锁

1 天 13 小时 16 分 49 秒

正在载入加密答案…

03 · 成绩排序 ​

OpenJudge 原题 · 作业页面

保存每一行 (姓名, 整数分数),按成绩降序、姓名升序排序。可以用 (-分数, 姓名) 作为排序关键字,元组会先比较第一项,相等时再比较第二项。

Bob 90、Ada 90、Cia 70 排序为 Ada 90、Bob 90、Cia 70。列表里保留每条记录,不因姓名重复而覆盖同名学生。

课堂追问: 若使用 reverse=True 将两个关键字一起反转,同分时姓名的顺序会怎样?

展开思考

姓名也会变成降序,与题目要求不符。可以只把数值分数取负,保持姓名的升序。

本题答案暂未公开

北京时间 2026/11/09 00:00:00 解锁

1 天 13 小时 16 分 49 秒

正在载入加密答案…

04 · 矩阵换行求边缘和 ​

OpenJudge 原题 · 作业页面

将输入的行号减 1,交换两个行列表。再遍历交换后的矩阵:只要某个位置在首行、末行、首列或末列,就将它加入一次。

text
交换前        交换第 1、2 行后
1  2  3      4  5  6
4  5  6      1  2  3
7  8  9      7  8  9

交换后总和为 45,唯一的内部元素为 2,因此边缘和是 43。也可以逐格检查四个边缘条件,适用于只有一行或一列的情况。

课堂追问: 如果分别加四条边,角上的数字会被计算几次?

展开思考

通常会被算两次。逐格判断“在任一边缘”并只累加一次,可以避免重复;按边分别累加时则要额外排除重复位置。

本题答案暂未公开

北京时间 2026/11/09 00:00:00 解锁

1 天 13 小时 16 分 49 秒

正在载入加密答案…

05 · 图像模糊处理 ​

OpenJudge 原题 · 作业页面

读入原图后逐行复制出新图;只计算内部像素,边缘保持原值。中心及上下左右共 5 个位置,所有值都从原图读取,计算结果写到新图。

一个内部像素的新值从哪里来?

原图:中心和上下左右,共 5 个值。

求平均:(100 + 0 + 50 + 200 + 50) ÷ 5 = 80

写入:新图的中心位置写 80;计算其他位置时仍读取原图。

原图和新图的每一行都应独立。new = image 只是增加另一个引用;new = image[:] 只复制最外层列表,里面各行仍然共用。

课堂追问: 五个整数求和后除以 5,会恰好出现小数部分为 0.5 吗?可以使用整除直接代替舍入吗?

展开思考

小数部分只会是 0、0.2、0.4、0.6、0.8,不会恰好为 0.5。round(total / 5) 可用于本题;整除会将 0.6、0.8 向下截断,不符合要求。

本题答案暂未公开

北京时间 2026/11/09 00:00:00 解锁

1 天 13 小时 16 分 49 秒

正在载入加密答案…

06 · 去除重复数字 ​

OpenJudge 原题 · 作业页面

先把输入转成整数,再去重并按从小到大排序。输出时把结果用空格隔开;题目要求的是一组数字,不是带逗号和方括号的列表表示。

2 11 2 -1 去重排序后为 -1 2 11。集合用于去重,排序用于决定输出顺序。

课堂追问: 为什么不应先按字符串顺序排列 2 和 11?

展开思考

字符串按字符比较,11 的首字符 1 小于 2,会排在 2 前面。转成整数后才按数值比较。

本题答案暂未公开

北京时间 2026/11/09 00:00:00 解锁

1 天 13 小时 16 分 49 秒

正在载入加密答案…

07 · 小鹿的工作和休息时间 ​

OpenJudge 原题 · 作业页面

以开始时间排序,依次合并重叠或首尾相接的区间。后一段起点 a <= 当前右端 时连续,合并后的右端取两段右端较大值;否则保存当前区间并开始新的一段。

把重叠或相接的时间段连起来
已按起点排序;点击“下一步”逐段观察。
[1, 4]
[3, 7]
[7, 9]
[11, 14]
015
准备尚未开始

区间已经按起点排序。每次取一个区间,观察它与当前区间的关系。

0 / 5

所有连续段都得到后,比长度 终点 - 起点;长度相同选开始更早的。工作前若有正长度休息段就输出起床到工作开始;工作后同理。

课堂追问: 处理 [1,8] 后遇到 [2,3],右端应变成 3 吗?如果 [1,4] 和 [6,9] 一样长,选哪段?

展开思考

不能变成 3,因为新的小区间被包含在 [1,8] 内,右端应保持 8。后一个例子两段长度相同,选择更早的 [1,4]。工作覆盖整个清醒区间时不输出零长度休息段。

本题答案暂未公开

北京时间 2026/11/09 00:00:00 解锁

1 天 13 小时 16 分 49 秒

正在载入加密答案…

08 · 字典练习 ​

OpenJudge 原题 · 作业页面

前两行每行先按逗号分成多组,再把每组按空格拆成字母键和整数值。将新增键值对存入字典,修改键 a,然后依题意判断键、值与键值对。

如果 D = {'a': 8, 'b': 1, 'c': 0},那么 c 是键、整数 0 是值、b 的值为整数 1,三个判断都为 True。

课堂追问: 为什么 0 in D 与 0 in D.values() 不是同一个问题?

展开思考

前者检查 0 是否是字典的键,后者检查 0 是否是某个键对应的值。字母与数字按题面分别保存为字符串键和整数值。

本题答案暂未公开

北京时间 2026/11/09 00:00:00 解锁

1 天 13 小时 16 分 49 秒

正在载入加密答案…

09 · 单词出现频率统计 ​

OpenJudge 原题 · 作业页面

每行读一个单词,直到输入结束;以单词为键,出现次数为值累加。再按次数降序、次数相同时按单词字典序升序排序。

about、send、about、me 的计数是 about: 2、send: 1、me: 1,输出顺序为 2 about、1 me、1 send。第一行本身也是单词,不是单词总数。

课堂追问: 如果所有单词都只出现一次,应按什么顺序输出?

展开思考

计数全部相同,所以由第二个关键字决定:按单词字典序从小到大输出。

本题答案暂未公开

北京时间 2026/11/09 00:00:00 解锁

1 天 13 小时 16 分 49 秒

正在载入加密答案…

10 · 网站网页访问统计 ​

OpenJudge 原题 · 作业页面

把 hh:mm:ss 转为从当天零点开始的秒数:h × 3600 + m × 60 + s。每条记录用结束秒数减去开始秒数,再累计到对应网页。

网页访问与累计时长
index.html6 + 183 = 189 秒
study.html185 秒

单次最长的是 study,累计最长的是 index。题目不考虑跨午夜;起止相同时这条记录的时长为 0。

课堂追问: 题面没有说明累计时长相同时怎么选网页,课堂解释时该如何处理?

展开思考

明确说明题面没有规定并列规则,不要把自己选择的处理方式当作题目要求。解决样例或明确无并列的数据时,按累计时长选择即可。

本题答案暂未公开

北京时间 2026/11/09 00:00:00 解锁

1 天 13 小时 16 分 49 秒

正在载入加密答案…

11 · 单词打分(提高版) ​

OpenJudge 原题 · 作业页面

读入人数 n 后有 10n 条评分。按单词分组,保存总分、评分次数和对应的评分人 id;比较每个实际收到评分的单词的平均分,找最低值。

A 的分数是 2、8、8,平均为 6;B 只有一个评分 5,平均为 5,因此 B 更简单。不能只比总分,也不能先把平均分四舍五入再比较。

课堂追问: 前两次的平均为 5,再与第三次 8 直接平均,为什么得到的 6.5 不对?

展开思考

这样把前两次合成的平均值当成一条评分,最后一次的权重变大。应保存总分和次数,计算 (2+8+8)/3=6,同时保留原有 id 输出顺序。

本题答案暂未公开

北京时间 2026/11/09 00:00:00 解锁

1 天 13 小时 16 分 49 秒

正在载入加密答案…

课程资料由授课教师、助教与同学共同积累。