三阶段模拟 4 分钟阅读

第二阶段:断网实操

限时 60 分钟,共 40 分。不得联网,不得查看第一或第三阶段材料。输入的文本和工作簿位于 data/,请把答案保存到 模拟赛/output/。

任务一:海龟作图(6 分)#

编写 task1_turtle.py:

  • 使用循环画一个边长为 120 像素的正六边形。
  • 画笔颜色为蓝色,画笔宽度为 3。
  • 内部填充浅黄色。
  • 每画完一条边,海龟向右旋转 60 度。

只使用规程列出的 turtle 函数。

任务二:算法与函数(8 分)#

编写 task2_algorithms.py,完成以下要求:

data = [48, 17, 92, 35, 76, 92, 11]
  1. 编写 findMinMax(values),返回列表中的最小值和最大值,返回形式为元组。
  2. 编写 searchAll(values, target),返回目标值出现的全部索引。
  3. 对 data 输出目标值 92 的全部索引。
  4. 使用冒泡排序将 data 升序排列,每完成一轮都输出这一轮结束后的列表。
  5. 对 [11, 17, 35, 48, 76, 92] 使用二分查找寻找 76,输出每次参与比较的中间值。

评分:函数 3 分,重复值查找 2 分,排序轮次 2 分,二分结果 1 分。

任务三:文本文件处理(10 分)#

读取 data/stage2_scores.txt。每行格式为:

学号|姓名|班级|信息科技|数学|英语

编写 task3_report.py:

  1. 计算每名学生的总分,按文件原顺序输出到 output/第二阶段_成绩报告.txt。
  2. 每行格式为 学号 姓名 总分。
  3. 计算每个班级的“学生总分平均值”,保留两位小数,并按班级第一次出现的顺序输出。
  4. 输出全班总分最高的学生;若并列,取文件中先出现的学生。
  5. 使用 with open,文件编码为 UTF-8。

报告格式:

S001 张晨 255
...
班级平均分
高一(1)班 247.80
高一(2)班 250.60
最高总分:S006 周然 277

任务四:正则表达式与文件管理(7 分)#

读取 data/stage2_labels.txt,完成 task4_files.py:

  1. 提取所有以 PY-2026- 开头标签末尾的三位数字,例如 A-PY-2026-015 提取 015。
  2. 对结果去重并按数字升序排列,写入 output/第二阶段_编号.txt,每行一个编号。
  3. 使用 os.makedirs 创建 output/归档/原始数据。
  4. 使用 shutil.copy 把 data/stage2_scores.txt 复制到 output/归档/原始数据/。
  5. 使用 os.rename 把复制后的文件改名为 scores_backup.txt。
  6. 分别检查目录、原始文件和备份文件是否存在,并输出三个布尔结果。

评分:正则提取 2 分,去重排序 1 分,目录创建 1 分,复制与重命名 2 分,存在性检查 1 分。

任务五:openpyxl 成绩工作簿(9 分)#

以 data/stage2.xlsx 为输入,编写 task5_excel.py:

  1. 在“成绩”工作表中,把 G1、H1 分别设为“总分”“平均分”。
  2. 为第 2 行到最后一行填写公式:总分使用 =SUM(D2:F2) 的形式,平均分使用 =AVERAGE(D2:F2) 的形式,行号随当前行变化。
  3. 创建一个名为“统计”的工作表,分别用公式计算信息科技、数学和英语的平均分,并设置清晰的表头。
  4. 使用 copy_worksheet() 复制“成绩”工作表,复制出的工作表命名为“数据副本”。
  5. 将结果另存为 output/第二阶段_成绩.xlsx,不得覆盖输入文件。

评分:表头和公式 3 分,统计表 2 分,复制工作表 2 分,正确另存 2 分。