Skip to content

fix: 阶段二循环上界填空题面与答案大小写口径不一致 - #59

Merged
XiaoCow666 merged 1 commit into
XiaoCow666:mainfrom
linxi123-A:fix/stage2-loop-blank-case-hint
Sep 19, 2026
Merged

XiaoCow666 merged 1 commit into
XiaoCow666:mainfrom
linxi123-A:fix/stage2-loop-blank-case-hint

Conversation

@linxi123-A

Copy link
Copy Markdown
Contributor

背景(一次真实操作发现的卡点)

通过线上站点 https://saucodesense.com 的「学生体验」入口完整走核心学习路径时,在三阶段辅导的阶段二(积木编程)遇到一处明显阻力。

改动前的操作路径

  1. 登录页 → 学生体验(免注册,自动进入演示作业《循环与斐波那契数列》)
  2. 阶段一:3 道引导题作答 → 提交思路 → 通过,自动进入阶段二
  3. 阶段二第 2 题(填空)题面:「补全循环条件,确保从第三项计算到第 N 项。」
    上下文仅显示:for (int i = 2; i < _; ++i) { ... },看不到变量声明
  4. 按题面文字自然填入 N → 点击「验证代码」
  5. 结果:该题被判错,反馈「变量名大小写错误,程序中使用的是小写'n',而不是大写'N'」

学生因题面自身的大小写矛盾平白多一次错误尝试:题面和另外两题全部使用大写 N(数学符号),但程序实际声明的是 int n;,填空上下文又看不到声明。

根因

预置数据 services/demo_experience.py 的第 2 个 quiz step:

  • question 写「第 N 项」(大写)
  • correct_answer 为 'n'(小写,与参考程序 int n; 一致,本身正确)

判题先做精确比对再走 AI 等价性检查;真实运行中 AI 将 N/n 判为不等价。问题不在判题(C 语言标识符本就大小写敏感),而在题面没有告诉学生程序变量的真实名字。

改动(一个提示,一行)

services/demo_experience.py:

  • 改前:补全循环条件,确保从第三项计算到第 N 项。
  • 改后:补全循环条件,确保从第三项计算到第 N 项(程序读入的变量名为小写 n)。

保留数学符号 N,同时显式给出程序变量名,学生第一次就能填对。correct_answer 仍是 n(保证生成代码可编译)。

改动后的操作路径(预期)

阶段二第 2 题题面 → 看到「程序读入的变量名为小写 n」→ 填入 n → 验证代码 → 一次通过,不再出现由产品内容导致的误判。

验证(实际结果)

  • 新增 tests/test_demo_stage2_loop_bound_prompt.py(纯标准库,仅读取种子源文件文本;不 import Flask、不连数据库/Redis、不启动应用),共 2 个测试:
    • RED(改前):pytest tests/test_demo_stage2_loop_bound_prompt.py -q → 1 failed, 1 passed(旧题面不含「小写 n」)
    • GREEN(改后):同命令 → 2 passed
  • 相关回归:pytest tests/test_demo_experience.py tests/test_demo_guided_learning.py tests/test_demo_database_isolation.py -q → 13 passed(覆盖种子幂等写入、引导学习渲染、临时库隔离)

未验证范围

  • 改动仅一个字符串字面量,未重跑全量 800+ 测试:除种子/引导渲染外没有代码读取该字面量(推断边界);如评审要求可补跑全量。
  • 线上「改动后操作路径」需合并后用新体验会话(临时库每次重新播种)验证;正式库中已存在的 preset 行不在本次改动范围。
  • 未改动判题逻辑、AI 等价性检查、数据库结构、权限与部署文件。

回退

单提交、一行改动,revert 即可。

@XiaoCow666 XiaoCow666 left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CodeSense 自动评审

未发现会阻塞合并的安全风险、功能回归或运行错误;核心目标已通过更新阶段二题面完成。新增回归测试与 PR 描述中的验证结果一致,剩余仅为测试实现层面的可维护性改进。

合并后可以继续改进的地方

  • 回归测试通过正则和固定文本标记解析种子源文件,若后续调整代码格式或改用变量构造题面,测试可能在行为未回归时失效;可考虑补充基于实际播种结果的断言。

已有验证信息

  • PR 描述提供:pytest tests/test_demo_stage2_loop_bound_prompt.py -q,改动后 2 passed。
  • PR 描述提供:pytest tests/test_demo_experience.py tests/test_demo_guided_learning.py tests/test_demo_database_isolation.py -q,13 passed。
  • PR 描述说明未运行全量 800+ 测试;该范围未验证不构成当前一行题面改动的阻塞问题。

评审事件:38fea250-b3cf-11f1-92c1-d86d75cb63de

@XiaoCow666
XiaoCow666 merged commit d3673e7 into XiaoCow666:main Sep 19, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants