第二阶段:断网实操
限时 60 分钟,共 40 分。不得联网,不得查看第一或第三阶段材料。输入的文本和工作簿位于 data/,请把答案保存到 模拟赛/output/。
任务一:海龟作图(6 分)#
编写 task1_turtle.py:
- 使用循环画一个边长为 120 像素的正六边形。
- 画笔颜色为蓝色,画笔宽度为 3。
- 内部填充浅黄色。
- 每画完一条边,海龟向右旋转 60 度。
只使用规程列出的 turtle 函数。
任务二:算法与函数(8 分)#
编写 task2_algorithms.py,完成以下要求:
data = [48, 17, 92, 35, 76, 92, 11]
- 编写
findMinMax(values),返回列表中的最小值和最大值,返回形式为元组。 - 编写
searchAll(values, target),返回目标值出现的全部索引。 - 对
data输出目标值92的全部索引。 - 使用冒泡排序将
data升序排列,每完成一轮都输出这一轮结束后的列表。 - 对
[11, 17, 35, 48, 76, 92]使用二分查找寻找76,输出每次参与比较的中间值。
评分:函数 3 分,重复值查找 2 分,排序轮次 2 分,二分结果 1 分。
任务三:文本文件处理(10 分)#
读取 data/stage2_scores.txt。每行格式为:
学号|姓名|班级|信息科技|数学|英语
编写 task3_report.py:
- 计算每名学生的总分,按文件原顺序输出到
output/第二阶段_成绩报告.txt。 - 每行格式为
学号 姓名 总分。 - 计算每个班级的“学生总分平均值”,保留两位小数,并按班级第一次出现的顺序输出。
- 输出全班总分最高的学生;若并列,取文件中先出现的学生。
- 使用
with open,文件编码为 UTF-8。
报告格式:
S001 张晨 255
...
班级平均分
高一(1)班 247.80
高一(2)班 250.60
最高总分:S006 周然 277
任务四:正则表达式与文件管理(7 分)#
读取 data/stage2_labels.txt,完成 task4_files.py:
- 提取所有以
PY-2026-开头标签末尾的三位数字,例如A-PY-2026-015提取015。 - 对结果去重并按数字升序排列,写入
output/第二阶段_编号.txt,每行一个编号。 - 使用
os.makedirs创建output/归档/原始数据。 - 使用
shutil.copy把data/stage2_scores.txt复制到output/归档/原始数据/。 - 使用
os.rename把复制后的文件改名为scores_backup.txt。 - 分别检查目录、原始文件和备份文件是否存在,并输出三个布尔结果。
评分:正则提取 2 分,去重排序 1 分,目录创建 1 分,复制与重命名 2 分,存在性检查 1 分。
任务五:openpyxl 成绩工作簿(9 分)#
以 data/stage2.xlsx 为输入,编写 task5_excel.py:
- 在“成绩”工作表中,把
G1、H1分别设为“总分”“平均分”。 - 为第 2 行到最后一行填写公式:总分使用
=SUM(D2:F2)的形式,平均分使用=AVERAGE(D2:F2)的形式,行号随当前行变化。 - 创建一个名为“统计”的工作表,分别用公式计算信息科技、数学和英语的平均分,并设置清晰的表头。
- 使用
copy_worksheet()复制“成绩”工作表,复制出的工作表命名为“数据副本”。 - 将结果另存为
output/第二阶段_成绩.xlsx,不得覆盖输入文件。
评分:表头和公式 3 分,统计表 2 分,复制工作表 2 分,正确另存 2 分。