第 35 课学生工作纸|找错误、看修改、留证据
60 分钟。一人一台电脑。材料为原创学习时长小项目,不用自己的私人学习记录。先预测,再运行;首答保留,猜错不扣分。浏览器实验执行真实 JavaScript,但没有调用 Cursor。真实编辑器操作与本地后备要分别记录。
Q1|0—6 分钟:先看规则
输入是一组记录。minutes 允许数字或只含十进制数字的字符串,允许字符串首尾空格。换算后必须是 1—480 的整数。空白、零、负数、小数、布尔值、null、缺字段、非数字字符串拒绝。空数组返回 0。旧调用仍传字符串,必须保持兼容。
默认输入:
[{"subject":"阅读","minutes":"25"},{"subject":"练习","minutes":"15"},{"subject":"复盘","minutes":" "}]
按规则应该返回什么类型的结果?。猜原始程序会怎样处理第三条?。写数学合计与输入是否合法分别要检查什么:____。
Q2|6—12 分钟:拿到四个文件
教师已准备 Node 的同学,在本人练习位置新建 ai-study-time 文件夹,把下面四个文件保存进去。文件名必须完全一致,后缀是 .cjs,不是 .cjs.txt。打开文件链接后可复制原文至编辑器同名新文件再保存。尚未准备运行时者使用本页浏览器后备,无需课堂临时安装。
| 文件 | 它能回答什么问题 | 你找到的具体证据 |
|---|---|---|
| README.md | ||
| total.cjs | ||
| main.cjs | ||
| test.cjs |
在编辑器全项目搜索输入 minutes,打开函数与调用处。没有编辑器时,页面关键词框输入 minutes,点“检索摘录并运行检查”。网页只搜四份短摘录。写你的检索范围____;命中对象____;未看到的内容____。画输入 → 转换累计 → 结果比较,并标出规则从哪里来。
Q3|12—25 分钟:实际执行和定位
Node 路径:在 ai-study-time 目录打开终端,一条一条执行并保留原输出:
node --version
node main.cjs
node test.cjs
若提示找不到 node,写运行时未准备并切换浏览器;若提示找不到文件,核对当前目录和文件名。不要删除测试以消除 FAIL。初始程序就是待修版本。
网页路径:关键词 minutes,版本原始直接转换,记录保持默认。点击“检索摘录并运行检查”。观察第三条原始值、类型、Number 转换结果和最终合计。
| 观察项 | 我的实际记录 |
|---|---|
| 执行位置(Node / 浏览器) | |
| 第三条原始值和类型 | |
| Number 转换结果 | |
| 自定义记录结果 | |
| 固定八例通过 / 失败 | |
| 一项失败的输入、规则预期、实际结果 |
错误定位句:当____输入经过____时,程序____,但 README 要求____。
已有可用 Cursor:通过 File → Open Folder 打开该练习目录,进入 Agent 面板,粘贴下列阅读任务。界面因版本不同找不到时,用命令面板搜索 Agent;仍不可用则人工阅读四文件,不新购服务。
这是课堂原创学习时长项目。请先阅读README.md、total.cjs、main.cjs、test.cjs,不修改文件。
问题:main里minutes只有空格,却输出了合计。请指出输入从哪个文件进入,在哪一步被转换,并引用实际文件和函数。
解释规则对空白、数字字符串、整数范围、空数组的要求。列出最小修复计划以及需要保留的正常和边界测试。
没有读取到的文件请明确说明,不推测已经看过整个项目。
记录工具实际引用的文件____;自行打开核对过的证据____;漏掉的规则或尚未读取的文件____。无 Cursor 者用同样清单写人工阅读结果并注明。
Q4|25—38 分钟:比较与修复
候选一只加入 if (!row.minutes) 这样的真假值判空。先预测一个空格字符串与数值 0 各会怎样____,再切到“仅增加真假值判空”运行。随后比较“按类型、格式、范围完整校验”。
| 程序版本 | 默认记录结果 | 八例通过数 | 一个仍失败的输入与原因 |
|---|---|---|---|
| 原始直接转换 | |||
| 仅真假值检查 | |||
| 完整校验 |
写两个能区分候选的具体输入与规则依据,不只写“多测一些”:。为什么检查需要发生在累加之前?。
Cursor 实操者继续粘贴:
现在执行最小修复。只修改total.cjs中与输入校验有关的代码,保留导出的total名称以及数字、十进制整数字符串两类调用。
按README拒绝空白和非法类型/范围,空数组仍返回0。不要删除或放宽已有八个测试,不安装依赖,不改其他项目。
修改后运行node main.cjs与node test.cjs,报告真实结果和未运行的部分。
打开实际文件差异,记录新增校验在哪里、导出名字是否保留、测试有无被放宽。自己执行两条命令核对结果,不只相信工具口头说明。没有 Cursor 可人工修改;未进行项目编辑者标明只完成浏览器候选验证。
Q5|38—48 分钟:独立新输入与迁移
先独立写每题预期和依据,再将 JSON 逐项放进网页记录框,选择完整校验版运行。不要提前打开答案。真实项目已修复者可把新例加入自己的检查,但保留原八例。
| 题 | 完整输入 JSON | 预测 | 实际结果 | 判断发生在类型 / 格式 / 数值范围哪层 |
|---|---|---|---|---|
| A | [{"minutes":12},{"minutes":"8"}] | |||
| B | [{"minutes":"00"}] | |||
| C | [{"minutes":" 7 "}] | |||
| D | [{"minutes":true}] | |||
| E | [{}] |
选择一条预测修订,写依据如何改变____。选择一个应保留的字符串输入,说明为什么不能把接口随意改成只收数字____。
迁移卡:另一个调用方仍传 minutes 字符串。AI 建议改成只收数字,说“目前所见测试已通过”。你还要检索哪些位置、读哪些约定,增加哪条具体检查,才可以判断兼容性?____。
Q6|48—60 分钟:交付一段可信的说明
原问题及触发输入:
实际修改或检查的程序:
找到的规则、函数与调用证据:
实际执行命令或网页输入:
正常、边界、字符串调用检查结果:
AI协助与人工完成的部分:
尚未执行或未覆盖:
画出“文件变化 → 变化定位 → 分块与表示 → 索引 → 取回上下文 → 修改验证”。实线圈出本节亲手操作的部分,虚线标出只从官方资料了解的部分。
离堂回答:找到函数后为什么仍要看调用方?八个样例通过能证明什么,又不能证明什么?____。
提交 Q1 首答、Q2 四文件角色、Q3 原始失败、Q4 候选对比、Q5 独立新输入与修订、Q6 修改说明。真实 Cursor 操作另附实际差异和终端输出;后备操作写浏览器本地验证,产品操作写未执行,不把不同证据混在一起。