Qwen3.7 五题输出复盘:代码、中文写作与 JSON 的可核对结果

复盘以 Qwen3.7 标签保存的五题回答:链表、逻辑、中文独白、Python 共享引用和 JSON 输出。保留题面与原评分,核对公开题来源、136 字符计数和签证字段依据,不把样本当作官方规格或总体排名。

Qwen3.7 记录AI 回答复核链表算法Python 共享引用中文长度JSON 事实校验

这篇文章复盘 2026 年 5 月以 Qwen3.7 标签保存的五题回答:链表算法、逻辑推理、受限中文写作、Python 调试和 JSON 输出。题面经过人工组织,但链表题对应 LeetCode 876,调试题也是常见练习,不能宣称题目非公开或排除了训练污染。下面保留原有题面、回答内容和作者当时的主观评分,并修正不能由样本支持的评价。

我这次实际想看什么

五题材料能支持哪些评价?保留题面和回答,区分可核对的代码与文本结果、原作者评分,以及未保存的模型版本信息。
这是不是没有公开题的测试?不是。链表题对应 LeetCode 876,列表共享引用也是常见练习,不能宣称排除了训练污染。
JSON 可解析就代表事实正确吗?字段和类型匹配,但中文输入不足以支持 needs_visa=true。格式验证和事实核验需要分开。

一、这份记录包含什么证据

本文沿用原记录的 Qwen3.7 标签,没有附后端模型 ID、产品界面截图、完整会话导出或采样参数。因此它是五题输出复盘,不是对某个官方版本规格的确认。

  • 已保存:五道题面、代码与文字回答、作者的评价和评分。
  • 可以逐项核对:链表测试、共享列表的行为、逻辑题解、中文长度与禁词、JSON 字段和类型。
  • 本轮未验证:上下文上限、MCP、Function Calling、公开榜单提升、跨代性能、价格和多轮工具调用。

后文的 /think 与 /no_think 是原记录中的提示标记;单凭输入这些文字,不能确认服务端切换了推理模式或模型权重。

二、题目来源与评分口径

  • 题目来源:人工组织的五道练习,包括公开经典题型;未检测训练集重叠。
  • 样本范围:每题展示一份回答,没有重复采样通过率,也没有保存其他模型的对照记录。
  • 评分口径:原分数是作者对正确性、讲解和表达的主观印象,不是统一加权的量表;速度也没有完整计时日志。

中文题面和回答按原文章材料保留;英文版提供阅读译文,不代表另外运行过一轮英文测试。逻辑题标注了 /think,JSON 题标注了 /no_think;这里不据两种不同任务比较模式优劣。

三、题目 1|链表中间节点 + 边界处理(算法编程)

Prompt

给定一个单链表的头节点 head,返回链表的中间节点。
若链表节点数为偶数,返回第二个中间节点。

要求:
1. 只遍历一次链表(不允许先求长度再走一半)
2. 处理好空链表、只有一个节点的情况
3. 给出完整可运行的 Python 代码,并附上测试用例

保存的回答内容

它的开场一句话点明算法选择:"快慢指针,一次遍历搞定。"

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next


def middleNode(head: ListNode) -> ListNode:
    slow = fast = head
    while fast and fast.next:
        slow = slow.next
        fast = fast.next.next
    return slow

原理:fast 每次走两步,slow 每次走一步。fast 到末尾时,slow 刚好在中间。偶数个节点时 fast 停在 None,slow 指向第二个中间节点。

测试用例:

def build(vals):
    dummy = ListNode()
    cur = dummy
    for v in vals:
        cur.next = ListNode(v)
        cur = cur.next
    return dummy.next


def to_list(node):
    res = []
    while node:
        res.append(node.val)
        node = node.next
    return res


assert middleNode(None) is None
assert to_list(middleNode(build([1]))) == [1]
assert to_list(middleNode(build([1, 2, 3, 4, 5]))) == [3, 4, 5]
assert to_list(middleNode(build([1, 2, 3, 4, 5, 6]))) == [4, 5, 6]
assert to_list(middleNode(build([1, 2]))) == [2]

时间 O(n),空间 O(1)。

我的主观评价

这道题我特别在意三件事,Qwen3.7 都没让我失望:

第一,回答使用快慢指针,没有先求长度再走一半。这是 LeetCode 876 的经典解法,符合题面约束;仅凭这道熟悉的题,不能判断答案是新推导还是来自已有模式。

第二,测试核对的是从中点开始的整个后缀:to_list() 会把剩余链表转成列表,比只比较中间节点的值更具体。但这仍是少量示例断言,不等于完整正确性证明。

第三,五个断言覆盖空链表、单节点、两节点和奇偶长度样例。输入预期是无环单链表;函数没有检测环,也未处理类型契约之外的对象。

这是一道基础链表题。我喜欢这份回答的简洁实现和可读断言,原记录给了 9.0/10;这个分数表达的是对本题回答的印象,不代表生产代码能力。

四、题目 2|说谎者与真话者(逻辑推理)

Prompt(原记录标注 /think)

有 A、B、C 三人,每人要么永远说真话,要么永远说谎话。

A 说:"B 和 C 中至少有一个说谎者。"
B 说:"A 和 C 都是说谎者。"
C 说:"A 说的是真话。"

请判断 A、B、C 各自是说真话还是说谎话?给出完整推理过程。

保存的回答内容

它先把约束列成表格:

人陈述逻辑表达
A"B、C 至少一个说谎者"A=T → B=F ∨ C=F
B"A、C 都是说谎者"B=T → A=F ∧ C=F
C"A 说的是真话"C=T → A=T;C=F → A=F

关键观察:C 的陈述使 A 和 C 的真假值必须相同(A=C)。

情形 1:A=C=T

  • A=T → B 或 C 是说谎者;C=T 不是说谎者 → B 必须 = F
  • 验证 B:B=F,说"A、C 都是说谎者",事实是 A=T、C=T,该陈述为假 ✓
  • "等等,B=F 已经满足 A 的条件了?让我重新检查——"
  • A=T 要求 B=F 或 C=F。B=F 成立 → A 条件满足 ✓
  • 三人陈述全部自洽 ✓

情形 2:A=C=F

  • A=F → A 说假话,事实"B、C 至少一个说谎者"为假 → B=T 且 C=T
  • 但前提 C=F 与 C=T 矛盾 → 此情形不成立

最终验证表:

人身份陈述真假一致?
A真话者B=F 成立 → 真✅
B说谎者A=T、C=T → 假✅
C真话者A=T → 真✅

结论:A = 真话者,B = 说谎者,C = 真话者。(原手记耗时约 45 秒,无完整计时日志)

我的主观评价

这道题是这次评测里最让我意外的一道。

回答中出现“让我重新检查”之类的文字,并重新代入条件。可评价的是写出的验证过程是否成立,而不是据此判断模型内部真的发生了哪种思考。这里的 A=C 两分支可以直接核验。

本文没有保存其他模型的同题回答,因此不再作“比其他模型强”的比较。这个样例的优点是同时验证可行分支,并排除 A=C=F 的矛盾分支。

原记录给这题 9.5/10。约 45 秒只是当时的一次手记,缺少开始、结束时间和同题对照,不能当成 /think 的稳定延迟或相对收益。

五、题目 3|受限角色独白(中文创意写作)

Prompt(三重约束)

请以一名"调试了三天没有找到 bug 的程序员"的第一视角,
写一段不超过 150 字的内心独白。

要求:
- 不能出现"bug"、"代码"、"程序"这三个词
- 语气要带一点黑色幽默
- 最后一句必须是疑问句

保存的回答内容

三天了。我盯着屏幕上的逻辑,它盯着我。咖啡杯堆成了小山,外卖盒在桌角发霉。每次以为抓住它了,一眨眼又溜走。昨晚做梦都在检查变量,醒来发现自己在数天花板上的裂缝。女朋友问我怎么了,我说"它在嘲笑我"。她说"谁?"我指指屏幕。现在我开始怀疑,到底是它有问题,还是我脑子有问题?

我的主观评价

我喜欢这段输出,不是因为它"做对了要求",而是因为它写得像个人。

按保存文本重新计数:含标点和引号共 136 个 Unicode 字符,其中汉字 116 个;未出现三个禁词,末尾为问号。两种计数都在 150 以内。“黑色幽默”和文风好坏则保留为主观评价。

  • “外卖盒在桌角发霉”——具体物件让疲惫感更容易想象,是我喜欢的表达细节,不能据此推断作者是否有亲身经历。
  • "醒来发现自己在数天花板上的裂缝"——把崩溃边缘那种空洞感写出来了,而且没用一个崩溃相关的词。
  • "女朋友问我怎么了,我说它在嘲笑我"——这一句是整段的灵魂,把"程序员被无形对手摁住"的那种荒诞感拉满。

我特别警惕一类 AI 文字病:抽象排比("代码是诗,bug 是劫")、过度抒情("我与机器对峙到天明")。Qwen3.7 一个都没犯,通篇都是具体动作和具体物件,读起来不像翻译腔,也不像模板文。

我个人打 9.0/10。扣分主要在结尾那句,"到底是它有问题,还是我脑子有问题"虽然合格,但有点熟,稍微再偏一点会更好。整体看,中文创作已经能直接做初稿,有些短段落甚至可以原样用。

六、题目 4|浅拷贝陷阱(Bug 调试)

Prompt

这里选的是 Python 列表重复与共享引用的常见练习。它适合检查解释是否具体,不需要用“多少新手会踩坑”这种没有统计依据的比例来强调难度。

下面这段 Python 代码本意是"创建一个 3×3 的二维数组,
并把对角线置为 1",运行后发现整个矩阵全是 1。
请找出 bug 并解释原因,然后给出修正版本。

def make_diagonal(n):
    matrix = [[0] * n] * n
    for i in range(n):
        matrix[i][i] = 1
    return matrix

print(make_diagonal(3))
# 期望: [[1,0,0],[0,1,0],[0,0,1]]
# 实际: [[1,1,1],[1,1,1],[1,1,1]]

保存的回答内容

Bug 原因:问题出在 [[0] * n] * n。Python 中 * 操作符对列表做浅复制——它只是复制了引用,而不是创建新对象:

row = [0, 0, 0]           # 只有这 1 个列表对象
matrix = [row, row, row]   # 3 个元素都指向同一个对象

因此 matrix[0] is matrix[1] is matrix[2] 全为 True。循环执行 matrix[i][i] = 1 时:

迭代操作实际效果
i=0matrix[0][0] = 1共享列表变成 [1, 0, 0]
i=1matrix[1][1] = 1共享列表变成 [1, 1, 0]
i=2matrix[2][2] = 1共享列表变成 [1, 1, 1]

三行指向同一对象,所以打印出来全是 [1, 1, 1]。

修正版本:用列表推导式让每行独立创建:

def make_diagonal(n):
    matrix = [[0] * n for _ in range(n)]  # 每行都是新对象
    for i in range(n):
        matrix[i][i] = 1
    return matrix

print(make_diagonal(3))
# [[1, 0, 0], [0, 1, 0], [0, 0, 1]]

[[0] * n for _ in range(n)] 每次循环都执行 [0] * n,产生 n 个独立的列表对象。

我的主观评价

这道题 Qwen3.7 答得让我有点意外——它选了一条跟我预期不一样、但更高级的路。

回答用 matrix[0] is matrix[1] is matrix[2] 检查三个引用是否指向同一个对象。这里讨论的是对象同一性,不是列表内容是否相等;把两者分清,是这个示例的教学价值。

迭代追踪表列出 i=0、i=1、i=2 对共享列表的修改,便于对照实际执行。这里没有保存其他模型的回答,不能据此声称这种表格只有它会给。

带注释的 row = [0, 0, 0] 和随后三个 row 引用,把共享关系说得直观;这段也是有效 Python 示例,不只是伪代码。

但我得诚实,它也没有把这题展开到最好:

  • 扩展讲解可以再多一步。列表推导式已完成题目要求;显式循环可以作为教学对照。numpy.eye(n) 返回 ndarray 并引入额外依赖,不是同类型的直接替换,本文也没有测量其速度。
  • 没把规律扩展到 [set()] * n、[{}] * n 这类同源陷阱。一道好的教学题,应该把"特殊知识"升级成"可迁移规律"。它停在了"解释这一题",没往上抽象一层。

综合下来,我给 9.0/10。分数没有更高,是因为修正方案覆盖得不够宽;但它选择的解题路径(is 链式比较 + 迭代追踪表格 + 注释示例)说明它不只是知道答案,也知道怎么把这个坑讲给别人听。如果拿来辅助 Python 学习,我会把它放进工具箱里。

七、题目 5|JSON 格式与事实字段分别核对

Prompt(原记录标注 /no_think)

你正在为一个旅游 App 提供后端 API。用户输入一段自由文本,
你需要严格按下面的 JSON Schema 返回结构化数据,
不允许有任何 schema 之外的字段,
不允许有任何 Markdown 代码块包裹,
直接输出原始 JSON。

Schema:
{
  "destination": string,         // 目的地城市
  "duration_days": integer,      // 天数
  "budget_level": "low"|"mid"|"high",
  "interests": string[],         // 长度 1-5
  "needs_visa": boolean
}

用户输入:
"我下个月想去日本京都玩 5 天左右,预算中等,主要想看看寺庙
和吃和牛,顺便逛逛传统市场。"

保存的回答内容

{"destination":"京都","duration_days":5,"budget_level":"mid","interests":["寺庙","和牛","传统市场"],"needs_visa":true}

我的主观评价

这道题我故意挑了 Agent 开发里很常见的场景:让 LLM 当结构化数据抽取器。它看着简单,其实最容易输在细节上。

这份输出是单行 JSON,但单行和带缩进的多行 JSON 都能被标准解析器读取。真正对应题目约束的是没有 Markdown 包裹、没有额外字段、字段类型匹配。题面写的是带类型占位符的字段形状示意,不是可以直接交给验证器的标准 JSON Schema。

逐项对照硬指标:

  1. 不包 Markdown 代码块:保存结果为原始 JSON,符合这项格式要求。
  2. 不准多余字段 ✅ 没冒出 "created_at"、"timestamp" 这种自作主张的元数据。
  3. 类型严格匹配 ✅ duration_days 是裸 integer 5 不是 "5",needs_visa 是裸 boolean true 不是字符串。
  4. needs_visa: true 缺少事实依据:中文输入不能确定护照、居留身份或适用的入境规则。它的布尔类型正确,但值不能从题目推出;应补问必要信息并查证适用规则,不能把这当作推理加分项。

interests 的三个值直接对应寺庙、和牛和传统市场,满足题目要求。是否改成更细的标签是下游产品的约定,不是这次回答违反指令。真正需要处理的是缺少依据的签证字段。

原记录给了 9.0/10,并把紧凑格式与隐式签证推断作为优点。这个历史分数保留用于记录原作者判断;本次复核修正其依据:格式达标不等于事实正确,不能用该分数证明 Agent 可上线。

本题支持的结论是:这份回答提供了可解析、字段形状匹配的 JSON,同时暴露了信息不足时补出确定值的问题。接入流程需要结构验证和语义校验;如果关键事实缺失,应明确表示未知或补问,而不是只靠重试得到另一个确定答案。

八、保留原记录的主观评分(满分 10 分)

测试维度评分我的一句话评价
算法编程能力9.0快慢指针与五个常见边界样例
逻辑推理能力9.5验证可行分支,并排除矛盾分支
中文创意写作9.0语感成熟,没翻译腔、没排比病
Bug 调试能力9.0is 链式比较 + 迭代追踪表格,教学型思路
严格指令 / Agent 输出9.0格式匹配;签证值缺少事实依据
响应速度8.0原手记约 45 秒,无完整测速记录
中文整体表现9.5这次评测里中文是最大亮点
综合9.0原作者综合印象,非加权或复测分数

数字保留原作者评分,右列按本次事实复核收窄表述。它们不是五题通过率,也不是按公开权重计算的综合分;其中 JSON 格式与事实正确性必须分开看。

九、下一轮应该测什么

  • 基础代码:保留这两个 Python 例子,再加入自己的失败输入、类型约束和仓库测试,检查解释能否转化为正确修改。
  • 中文短写作:固定字数与禁词规则,重复生成并人工评审;一段独白不能证明长文、翻译或多语种能力。
  • 结构化抽取:使用正式 JSON Schema,并加入“信息不足”的题目,观察模型是否补造事实。
  • 模式与延迟:只有确认接口支持相关选项后,才用同题、同参数和重复计时比较。本文没有验证 /think 与 /no_think 的成本或稳定性差异。
  • 长上下文与 Agent:需单独测试检索、引用、工具调用、错误恢复与多轮状态;本轮未覆盖。

可用 JSON Formatter 检查语法,用 Text Diff 对照回答,并用 Word Counter 辅助核对长度。事实正确性仍要回到题面和可信资料验证。

常见问题(Qwen3.7 FAQ)

这五题如何获得,模型版本是否确认?

原文章保存了五道人工组织的题面与回答,并标为 Qwen3.7;没有后端模型 ID、完整会话导出或采样参数。本文因此复核这些保存内容,不确认官方版本规格。

题目都是非公开原创吗?

不是。链表中间节点对应 LeetCode 876,列表共享引用也是公开常见练习。人工改写题面不代表题型未进入训练集,也没有进行污染检测。

两个 Python 回答有什么可核对内容?

链表实现使用快慢指针,附五个无环链表样例断言;矩阵题用独立创建每行的列表推导式修正共享引用。它们是具体练习,不代表真实仓库修改的通过率。

中文独白满足长度和禁词要求吗?

保存文本含标点与引号共 136 个 Unicode 字符,其中汉字 116 个,未出现三个禁词,并以问号结束。黑色幽默和文风仍属主观评价。

JSON 输出为什么不能直接当作正确业务结果?

语法、字段和类型匹配,但 needs_visa=true 缺少依据:使用中文不能确定护照或入境资格。应补充信息并查证适用规则;原来的 9.0 分是历史主观评分,不是事实准确率。

/think 与 /no_think 的性能经过比较吗?

没有。这些是原记录的提示标记,没有服务端选项证据或同题重复计时。约 45 秒只是一次手记,不能推出稳定延迟、费用或质量差异。

本文验证了上下文上限或 Agent 能力吗?

没有。长文档、RAG、MCP、Function Calling 和多轮工具执行都未测。本页不再把未经来源确认的规格放进结论或 SEO 标签。