第 35 课 · Cursor案例:找到相关代码,再验证修改

答案与判分

先完成学生工作纸并保留原始作答,再用本页核对。真实工具输出以核验标准评价。

第 35 课参考答案|先完成独立输入再核查

首次预测错误不扣分,保留依据和改正过程。工具的代码建议不设唯一实现,只要满足 README、保留调用兼容并有真实测试证据。浏览器测试与外部编辑器操作必须分开记。

Q1:输出一个数不等于输入合法

默认第三条是全空格字符串,规则要求拒绝,不形成有效总数。原版 Number 把它转成 0,最终 25+15+0 得到 40。40 的算术没有算错,缺陷在于没有先按任务规则拒绝第三条。这与合法地只提交前两条不同:后者确有两条完整记录,前者有缺失记录却被悄悄当零。

Q2:四文件承担不同证据

README 规定类型、范围、空数组与兼容要求;total 是转换与累加实现;main 给出包含空格的实际调用;test 将固定输入结果和预期比较。可画 main → total → main 输出,test 另调用 total 并核对 README。

页面 minutes 查询在固定四份摘录中命中 README、total、main,共 3/4;test 摘录用自然语言列案例而没有该关键词。磁盘 test 完整文件确实含 minutes,因此真实编辑器全项目搜索的命中数可能不同。这个差异正好说明检索范围需要写明。没有命中不能推出完整项目不存在相关内容,更不能说已经读完全部仓库。

Q3:原版失败证据

Node main 的原始输出为“合计分钟:40”。原版固定八例 3/8 通过、5/8 失败,通过 A 正常、E 空数组、G 字符串调用;B 空格、C 零、D 小数、F 超范围、H 布尔失败。原版直接做数值转换,对 true 会得 1,对 481 会保留 481,这些不符合输入规则。

定位句例:“全空格 minutes 从 main 进入 total,未经格式检查就经 Number 转成 0,导致不完整记录也得到 40;README 要求拒绝空白。”引用必须指向实际文件内容,工具仅说“类型问题”不构成完整证据。运行环境缺失应标为环境未就绪,不当作函数测试通过或失败。

Q4:三个版本的区别

版本 默认输入 固定检查 原因
原始转换 40 3/8 多种不合法原值被直接转换
仅真假值检查 40 4/8 增加拦截数值0,但空格字符串为真,仍漏空格、小数、超上限、布尔值
完整校验 拒绝第三条 8/8 类型、去空格后的格式、整数范围均核对后才累加

候选区分输入可用一个空格、1.5、481、true;必须说清 README 期望拒绝。不是所有可被 Number 转换的值都是本任务允许的输入。字符串 " 7 " 允许先去首尾空格检查;全空格去空格后为空,不允许。

教师备查的参考实现与待修复四文件分开放,避免首次运行已经没有错误。独立题完成后,可以逐行比较自己的修复;不要覆盖唯一的原始失败记录。参考代码如下:

function total(rows) {
  if (!Array.isArray(rows)) throw new Error('需要记录数组');
  return rows.reduce((sum, row, index) => {
    const value = row && row.minutes;
    if (typeof value !== 'number' && typeof value !== 'string') {
      throw new Error('minutes类型不支持');
    }
    if (typeof value === 'string' && !/^\d+$/.test(value.trim())) {
      throw new Error('需要十进制整数字符串');
    }
    const minutes = Number(value);
    if (!Number.isInteger(minutes) || minutes < 1 || minutes > 480) {
      throw new Error('需要1至480的整数');
    }
    return sum + minutes;
  }, 0);
}
module.exports = { total };

错误文案可以不同;判断规则与函数导出约定不能偷换。复制参考实现不证明学生能定位问题,仍应提交首答与新输入判断。保存参考文件至四文件目录的上一级后,可在 project 目录运行 node test.cjs ../reference-total.cjs 检查参考模块;它不修改原始 total.cjs。

Q5:独立题与迁移

题 结果 对应依据
A 20 数字12与十进制字符串8均有效
B 拒绝 "00" 通过数字字符格式,但转换后为0,违反1至480
C 7 去首尾空格后为有效十进制整数,保留字符串兼容
D 拒绝 true 是 boolean,不在允许原始类型中
E 拒绝 minutes 缺失,得到 undefined,类型不支持

迁移要检索函数引用、导入、调用方与输入组装位置,并阅读接口约定。至少保留一个数字字符串实际调用(如10与"10"合计20)和空数组检查。只测数字的局部新程序即使通过,也没有覆盖原来允许的字符串调用。是否改接口需要明确需求与对应迁移,不由 AI 为了省校验默默决定。

Q6:修改说明的范围

例:“空格时长原先被 Number 转为零,现按 README 在求和前拒绝无效类型、格式与范围,保留数字字符串调用和空数组。实际执行原八例及 A—E 新例;保存差异和命令输出。未测试真实业务大数据,也未据此验证 Cursor 的内部检索或服务效果。”

浏览器后备应改写为“验证了随课三份候选逻辑,实际项目文件未修改,Cursor 操作未执行”。实际工具建议也应由学生打开文件和运行检查支持。公开索引图中的后台更新、嵌入和检索服务没有在网页被实测,用虚线标明来源阅读。

10 分评分

项目 分数 可收集证据
Q1 规则与首答 1 区分算术结果和输入合法
Q2 四文件定位 2 规则、函数、调用、测试各有实际对象
Q3 原版复现 1 命令或网页输入、原输出和一项失败原因
Q4 候选与实际差异 2 比较两个具体输入,识别真假值误判
Q5 新输入与调用迁移 2 五题有依据,保留字符串兼容
Q6 修改说明 1 问题、变化、测试、未覆盖齐全
执行来源准确 1 AI、人工、浏览器、未执行不混写

不能操作 Cursor 不扣概念分;相应操作证据写未执行。原版预期失败和参考版通过属于本地代码检验,不是商业产品验收或真人试教。