06 / 90

Day 06: 真值与文本/数据分支

编写并测试能处理正常、空和易误导的文本/数据输入的分支,同时用安全的 Git diff 与提交保留证据。

自学方法与 Python 工程基础 480 分钟(8 小时专注学习)
01 120 分钟

真实输入的真值表

独立掌握检查(不使用 AI 辅助)。

前置要求

已完成 Day 05 的比较检查;能用 python3 运行 Python 文件并读懂其输出。

学习目标

预测并验证空值、零和空白输入的 bool() 结果,并解释为什么 `if value:` 分支可能把真实数据判错。

操作指引

必做:在运行任何代码之前,针对 []、[0]、""、" "、0、"0" 逐一写下你对 bool(value) 以及分支 presence(value)(值为真时返回 "present",否则返回 "missing")结果的预测。然后运行程序,原样复制输出,并标出所有与预测不符的行。

复盘:每处不符都用一句话写出规则:空容器和数值零为假;任何非空字符串(包括 " " 和 "0")都为真。

选做:只有在必做证据完整之后,才把 None 和 [[]] 加入列表,先预测再运行。

自主演练与记录

创建 truthiness.py,定义 presence(value)(value 为真时返回 "present",否则返回 "missing"),并按 []、[0]、""、" "、0、"0" 的顺序,把每个值的 repr(value)、bool(value) 和 presence(value) 打印在同一行。

客观知识测验与诊断追踪

请回答以下题目检验掌握情况。提交前请诚实声明你的辅助条件。

声明辅助条件

说明:无 AI 辅助属于诚实声明条件,非平台监控或强制检测手段。

1.

在真值表中,哪个输入虽然不含任何可见数据,却为真,因而被 presence(value) 报告为 "present"?

作答应证与历史记录

    活动掌握标准

    在不使用 AI 辅助的情况下,在运行前写下全部 6 个输入的预测,实际输出与参考答案完全一致,并能正确解释两行误导性结果(`" "` 被判为 present,`0` 被判为 missing)。必做与选做内容分开,证据中注明为独立完成。

    权威源资源与权利证明

    linking PSF License Version 2

    Python Standard Library: Built-in Types

    作者 / 机构: Python Software Foundation | 原始出处链接 ↗

    对应章节 / 时间戳: “真值测试”“比较”和“可变序列类型”各节

    验证版本与日期: Python 3.12 文档(核验日期:2026-10-30)

    入选理由:

    用于查阅真值、比较、绑定和对象修改行为的规范性参考资料。

    来源前置条件:

    Day 03 恢复演练

    安全回退方案(离线弹性):

    运行教材中提供的 Python 示例,并查阅已安装解释器的帮助。

    对比候选资源与选型分析 (2)
    Python Data Model reference ↗ compared_alternative [PSF License Version 2]

    该参考资料更深入地讲解对象语义,超出了表达式层面练习所需的范围;stdtypes 能将内容限定在运算符层面。

    The Python Tutorial: An Informal Introduction ↗ compared_alternative [PSF License Version 2]

    以叙述方式介绍相同的运算符;库参考文档则被选为查阅规范签名的资料。

    linking CC BY-NC-SA 3.0 (book) noncommercial share-alike

    Git User Manual: Recording Changes

    作者 / 机构: Git project | 原始出处链接 ↗

    对应章节 / 时间戳: 将更改记录到仓库

    验证版本与日期: 核验日期:2026-10-30

    入选理由:

    用于在安全提交前检查小范围差异的第一手参考资料。

    来源前置条件:

    Git 基础知识

    安全回退方案(离线弹性):

    在本地使用 git diff 和 git status;理解差异之后再提交。

    对比候选资源与选型分析 (2)
    git-diff command reference ↗ compared_alternative [Git documentation (GPL-2.0)]

    提供命令级别的选项参考;选择 Pro Git 章节,是因为它逐步讲解了如何在提交前检查更改。

    Atlassian Git tutorials: git diff ↗ compared_alternative [All Rights Reserved]

    易于理解的商业教程;对于同样的检查习惯,书籍章节更深入地解释了暂存和索引的语义。

    02 120 分钟

    显式条件与输入规范化

    独立掌握检查(不使用 AI 辅助)。

    前置要求

    已完成 Activity 01 的真值表;了解 `str.strip()` 和 `int()` 的作用。

    学习目标

    按照一份精确的规约实现 classify(raw):文本只规范化一次,只转换经过校验的数字文本,从而绝不混淆 missing、zero、positive 和 invalid。

    操作指引

    必做:阅读练习中的规约。在运行任何代码之前,写出参考表中 16 个输入各自的预期返回值(至少包括 " 7 "、""、"0" 和 "unknown")。实现 classify(raw),对全部输入运行,原样记录输出,并与预测逐行比较。

    复盘:每处不符都要指出违反了哪条规约,修正代码并重新运行,直到输出完全一致。

    选做:只有在必做证据完整之后,才加入一个你自己的输入(例如阿拉伯-印度数字三 "٣"),先根据规约预测结果,再运行。

    自主演练与记录

    编写严格遵守以下规约的 classify(raw):
    - 输入:raw 总是 str。其他类型不在规约范围内(例如 classify(None) 会抛出 AttributeError)。
    - 只规范化一次:text = raw.strip()。它会去掉首尾各种空白(空格、制表符、换行、全角空格 U+3000),中间的空格保留。
    - 若 text == "",返回 "missing"。
    - 若 text 只由 ASCII 数字 0-9 组成(text.isascii() and text.isdigit()),用 int(text) 转换:数值为 0 时返回 "zero"(因此 "00" 是 zero),否则返回 "positive"(因此 "007" 是 positive)。
    - 其他一切都返回 "invalid":任意大小写的字母("unknown"、"Zero")、正负号("-3"、"+7")、小数点("3.5")、下划线("1_000")、中间的空格("1 2")以及非 ASCII 数字("7")。invalid 文本绝不会被当作零。
    - 返回值恰好是四个小写字符串 "missing"、"zero"、"positive"、"invalid" 之一。
    每个输入按 f"{raw!r:12} -> {classify(raw)}" 的格式打印一行,使输出稳定且空白可见。
    需要预测并运行的 16 个输入(按此顺序;"\t\n" 是制表符加换行符,"\u30007" 是全角空格 U+3000 后接 7):" 7 ", "", "0", "unknown", " ", "\t\n", "\u30007", "007", "00", "Zero", "-3", "+7", "3.5", "1_000", "1 2", "7"。

    客观知识测验与诊断追踪

    请回答以下题目检验掌握情况。提交前请诚实声明你的辅助条件。

    声明辅助条件

    说明:无 AI 辅助属于诚实声明条件,非平台监控或强制检测手段。

    1.

    按照 Day 06 的规约,classify(" 0\t") 返回什么?

    作答应证与历史记录

      活动掌握标准

      在不使用 AI 辅助的情况下,在运行前写下 16 个输入的预测,classify 的输出与参考表完全一致,并能用一句话说明转换规则。必做与选做内容分开,证据中注明为独立完成。

      权威源资源与权利证明

      linking PSF License Version 2

      Python Standard Library: Built-in Types

      作者 / 机构: Python Software Foundation | 原始出处链接 ↗

      对应章节 / 时间戳: “真值测试”“比较”和“可变序列类型”各节

      验证版本与日期: Python 3.12 文档(核验日期:2026-10-30)

      入选理由:

      用于查阅真值、比较、绑定和对象修改行为的规范性参考资料。

      来源前置条件:

      Day 03 恢复演练

      安全回退方案(离线弹性):

      运行教材中提供的 Python 示例,并查阅已安装解释器的帮助。

      对比候选资源与选型分析 (2)
      Python Data Model reference ↗ compared_alternative [PSF License Version 2]

      该参考资料更深入地讲解对象语义,超出了表达式层面练习所需的范围;stdtypes 能将内容限定在运算符层面。

      The Python Tutorial: An Informal Introduction ↗ compared_alternative [PSF License Version 2]

      以叙述方式介绍相同的运算符;库参考文档则被选为查阅规范签名的资料。

      linking CC BY-NC-SA 3.0 (book) noncommercial share-alike

      Git User Manual: Recording Changes

      作者 / 机构: Git project | 原始出处链接 ↗

      对应章节 / 时间戳: 将更改记录到仓库

      验证版本与日期: 核验日期:2026-10-30

      入选理由:

      用于在安全提交前检查小范围差异的第一手参考资料。

      来源前置条件:

      Git 基础知识

      安全回退方案(离线弹性):

      在本地使用 git diff 和 git status;理解差异之后再提交。

      对比候选资源与选型分析 (2)
      git-diff command reference ↗ compared_alternative [Git documentation (GPL-2.0)]

      提供命令级别的选项参考;选择 Pro Git 章节,是因为它逐步讲解了如何在提交前检查更改。

      Atlassian Git tutorials: git diff ↗ compared_alternative [All Rights Reserved]

      易于理解的商业教程;对于同样的检查习惯,书籍章节更深入地解释了暂存和索引的语义。

      03 120 分钟

      安全 diff 与提交演练

      Agent 辅助工程检查:须声明授予的权限和审查范围;Agent 的输出不能作为独立掌握的证据。

      前置要求

      已完成 Activity 02 的规约和参考实现 classify;终端中可以使用 Git 和 python3;有一个可以接受只读、限定范围审查请求的 AI 编程 Agent。

      学习目标

      在询问 Agent 之前先写好预期输出,然后在一次性 Git 仓库中审查修复提案:对照预期输出测试,用 git diff --check 检查 diff,只提交经过审查的文件。

      操作指引

      必做:只在用 mktemp -d 新建的一次性仓库中操作,绝不在真实项目中进行。(1) 在询问任何 Agent 之前,把你自己对 6 个输入的预期输出写入 expected.txt。(2) 提交有缺陷的基线 classify.py,运行它,并用 diff 记录不一致之处。(3) 用类似下面的请求向 Agent 申请限定范围的审查:“只对照下面的规约审查 classify.py。不要运行命令、修改文件或提交。请给出替换方案,并列出这 6 个输入中结果会改变的项。”记录 Agent 名称、你授予的权限(只读、一个文件)及其回复。(4) 应用替换方案,检查 git diff,重新运行用例,运行 git diff --check,然后只提交 classify.py。参考答案给出了一套完整可复现的步骤,以 Activity 02 的实现作为提案。

      复盘:每条命令执行前写下预测,原样记录输出,并解释预期与实际输出之间的每一处差异。

      选做:只有在必做证据完整之后,才在已提交的 classify.py 的某一行末尾加一个空格,观察 git diff --check 的报告,再用 git restore classify.py 撤销。

      自主演练与记录

      在一次性仓库中,按照 Activity 02 的规约记录你对 " 7 "、""、"0"、"unknown"、" " 和 " 0 " 的预期输出(打印格式为 f"{raw!r} -> {classify(raw)}")。提交基线,用 git diff 审查 Agent 提出的修复,用 diff expected.txt actual.txt 和 git diff --check 验证,然后只提交 classify.py,让 expected.txt 和 actual.txt 保持未跟踪状态。

      客观知识测验与诊断追踪

      请回答以下题目检验掌握情况。提交前请诚实声明你的辅助条件。

      声明辅助条件

      说明:无 AI 辅助属于诚实声明条件,非平台监控或强制检测手段。

      1.

      你的输出与 expected.txt 一致,git diff --check 没有任何输出。git status --short 显示 M classify.py、?? actual.txt 和 ?? expected.txt。哪条命令只暂存经过审查的文件?

      作答应证与历史记录

        活动掌握标准

        expected.txt 在向 Agent 提出请求之前就已写好;证据显示基线的不一致、经过检查的 diff、`diff exit: 0`、`check exit: 0`,以及一个只含 classify.py 的提交,同时 expected.txt 和 actual.txt 保持未跟踪。Agent 请求、授予的权限(只读、一个文件)和回复均已记录,并标记为 Agent 辅助而非独立证据。必做与选做内容分开。

        权威源资源与权利证明

        linking PSF License Version 2

        Python Standard Library: Built-in Types

        作者 / 机构: Python Software Foundation | 原始出处链接 ↗

        对应章节 / 时间戳: “真值测试”“比较”和“可变序列类型”各节

        验证版本与日期: Python 3.12 文档(核验日期:2026-10-30)

        入选理由:

        用于查阅真值、比较、绑定和对象修改行为的规范性参考资料。

        来源前置条件:

        Day 03 恢复演练

        安全回退方案(离线弹性):

        运行教材中提供的 Python 示例,并查阅已安装解释器的帮助。

        对比候选资源与选型分析 (2)
        Python Data Model reference ↗ compared_alternative [PSF License Version 2]

        该参考资料更深入地讲解对象语义,超出了表达式层面练习所需的范围;stdtypes 能将内容限定在运算符层面。

        The Python Tutorial: An Informal Introduction ↗ compared_alternative [PSF License Version 2]

        以叙述方式介绍相同的运算符;库参考文档则被选为查阅规范签名的资料。

        linking CC BY-NC-SA 3.0 (book) noncommercial share-alike

        Git User Manual: Recording Changes

        作者 / 机构: Git project | 原始出处链接 ↗

        对应章节 / 时间戳: 将更改记录到仓库

        验证版本与日期: 核验日期:2026-10-30

        入选理由:

        用于在安全提交前检查小范围差异的第一手参考资料。

        来源前置条件:

        Git 基础知识

        安全回退方案(离线弹性):

        在本地使用 git diff 和 git status;理解差异之后再提交。

        对比候选资源与选型分析 (2)
        git-diff command reference ↗ compared_alternative [Git documentation (GPL-2.0)]

        提供命令级别的选项参考;选择 Pro Git 章节,是因为它逐步讲解了如何在提交前检查更改。

        Atlassian Git tutorials: git diff ↗ compared_alternative [All Rights Reserved]

        易于理解的商业教程;对于同样的检查习惯,书籍章节更深入地解释了暂存和索引的语义。

        04 120 分钟

        三天复习:独立完成边界情况函数

        独立掌握检查(不使用 AI 辅助)。

        前置要求

        已完成 Activity 01-03;手边有用于写解释的 Day 04 和 Day 05 笔记。

        学习目标

        不使用 AI,实现并测试能处理空字符串、"0" 和未知文本的分支,解释 Day 04-06 中一个出人意料的 Python 行为,并记录一次只含一个文件的安全提交。

        操作指引

        必做:不使用 AI,在编码之前写好 4 个验收用例(""、"0"、"unknown"、" 12 ")及其精确的预期消息。实现 quantity_message(raw),使每个用例都通过 assert,在一次性仓库中只提交 quantity.py,并简短解释 Day 04-06 中一个出人意料的结果。

        复盘:运行前预测输出,与预期消息逐字比较,并解释任何差异。

        选做:只有在必做证据完整之后,才把这 4 条消息翻译成另一种语言,同时保持相同的规则和相同的 4 个用例。

        自主演练与记录

        实现 quantity_message(raw)(raw 是 str),使用以下精确消息:空文本或只含空白的文本 → missing: enter a whole number;等于 0 的 ASCII 数字文本 → zero: nothing to order;其他 ASCII 数字文本 → ok: <数值>;其他一切 → invalid: <strip 后文本的 repr> is not a whole number。用 assert 测试 ""、"0"、"unknown" 和 " 12 ",在一次性仓库中只提交 quantity.py,并用两三句话解释 Day 04-06 中一个出人意料的结果。

        客观知识测验与诊断追踪

        请回答以下题目检验掌握情况。提交前请诚实声明你的辅助条件。

        声明辅助条件

        说明:无 AI 辅助属于诚实声明条件,非平台监控或强制检测手段。

        1.

        为什么仅用分支 if raw: 不足以检测数量未填写?

        作答应证与历史记录

          活动掌握标准

          在不使用 AI 辅助的情况下,4 个验收用例全部以精确消息通过,能正确对比真值判断与显式比较,提交只含 quantity.py,diff 检查干净,且之后 `git status --short` 的输出为空。必做与选做内容分开,证据中注明为独立完成。

          权威源资源与权利证明

          linking PSF License Version 2

          Python Standard Library: Built-in Types

          作者 / 机构: Python Software Foundation | 原始出处链接 ↗

          对应章节 / 时间戳: “真值测试”“比较”和“可变序列类型”各节

          验证版本与日期: Python 3.12 文档(核验日期:2026-10-30)

          入选理由:

          用于查阅真值、比较、绑定和对象修改行为的规范性参考资料。

          来源前置条件:

          Day 03 恢复演练

          安全回退方案(离线弹性):

          运行教材中提供的 Python 示例,并查阅已安装解释器的帮助。

          对比候选资源与选型分析 (2)
          Python Data Model reference ↗ compared_alternative [PSF License Version 2]

          该参考资料更深入地讲解对象语义,超出了表达式层面练习所需的范围;stdtypes 能将内容限定在运算符层面。

          The Python Tutorial: An Informal Introduction ↗ compared_alternative [PSF License Version 2]

          以叙述方式介绍相同的运算符;库参考文档则被选为查阅规范签名的资料。

          linking CC BY-NC-SA 3.0 (book) noncommercial share-alike

          Git User Manual: Recording Changes

          作者 / 机构: Git project | 原始出处链接 ↗

          对应章节 / 时间戳: 将更改记录到仓库

          验证版本与日期: 核验日期:2026-10-30

          入选理由:

          用于在安全提交前检查小范围差异的第一手参考资料。

          来源前置条件:

          Git 基础知识

          安全回退方案(离线弹性):

          在本地使用 git diff 和 git status;理解差异之后再提交。

          对比候选资源与选型分析 (2)
          git-diff command reference ↗ compared_alternative [Git documentation (GPL-2.0)]

          提供命令级别的选项参考;选择 Pro Git 章节,是因为它逐步讲解了如何在提交前检查更改。

          Atlassian Git tutorials: git diff ↗ compared_alternative [All Rights Reserved]

          易于理解的商业教程;对于同样的检查习惯,书籍章节更深入地解释了暂存和索引的语义。