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