04 / 90

Day 04: 值、绑定与可观察文本

预测并运行 Python 表达式,区分值与变量绑定,并在不把标签和对象本身混为一谈的前提下报告可观察的文本/数据。

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

值普查与类型标签

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

前置要求

已完成 Day 03 的补救练习;能够从终端启动 Python;复习“先预测、再观察”的方法。

学习目标

使用 repr()、type() 和 bool() 区分在屏幕上看起来相似的值(0、"0"、""、None),并解释为什么文本 "0" 不是数字 0。

操作指引

学习来源:在本活动现有的阅读与练习时段内,参考 Automate the Boring Stuff with Python, 3rd edition 的 Chapter 1; Practice Questions; Appendix B answers,用自己的话解释一处与本地任务的联系。保留现有练习与验收检查;若外部资料无法访问,使用课程自写的解释。必做任务:把下面的代码保存为 census.py。运行之前,先写下每一行输出的预测。然后运行 python3 census.py,记录准确的输出,并与预测进行比较。

for value in [0, "0", "", None]:
    print(repr(value), type(value).__name__, bool(value))
print("0" == 0, int("0") == 0)

用一两句话解释:为什么 "0"(文本)和 0(整数)在 repr() 显示、类型和真值上都不同。

选做任务:只有在必做证据完成之后,才在列表中再加入一个你自选的值(例如 0.0 或 "False"),先预测它的那一行,再重新运行。

自主演练与记录

在运行下面的程序之前,预测全部 5 行输出,然后记录准确的输出:

for value in [0, "0", "", None]:
    print(repr(value), type(value).__name__, bool(value))
print("0" == 0, int("0") == 0)

最后,解释为什么文本 "0" 不是数字零。

客观知识测验与诊断追踪

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

声明辅助条件

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

1.

print(repr("0"), type("0").__name__, bool("0")) 会输出什么?

作答应证与历史记录

    活动掌握标准

    你的预测记录和观察到的输出包含上面全部 5 行准确内容,并且解释中指出了类型差异(str 与 int)、真值规则(非空字符串为 True),以及需要用 int() 显式转换。记录中需写明必做/选做的边界,并声明未使用 AI 辅助。

    权威源资源与权利证明

    linking Copyright Al Sweigart; edition-specific reuse terms unverified linking only; no reproduction

    Automate the Boring Stuff with Python, 3rd edition

    作者 / 机构: Al Sweigart | 原始出处链接 ↗

    对应章节 / 时间戳: Chapter 1; Practice Questions; Appendix B answers

    验证版本与日期: Public edition checked 2026-11-01; moving pages may change

    入选理由:

    Beginner teaching and answer-keyed practice before checking exact semantics in the Python reference; selected chapters only, not the book's entire automation stack.

    来源前置条件:

    No prior programming required for Chapter 1; later chapters assume its basic Python concepts.

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

    Use the original localized explanations, exercises and checks already present in this activity; no external account or purchase is required for that fallback.

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

    Guided Python syntax but assumes programming familiarity; paired with the beginner text rather than used as its replacement.

    MIT OCW 6.0001 ↗ compared_alternative [CC BY-NC-SA 4.0]

    Lectures and problem sets teach a broader CS1 course; the book offers shorter text-first entry and an answer appendix.

    linking PSF License Version 2

    Python Standard Library: Built-in Types

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

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

    验证版本与日期: Python 3.12 documentation (verified 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 | 原始出处链接 ↗

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

    验证版本与日期: Verified 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 辅助)。

    前置要求

    已完成 Day 04 的活动 1;能够从终端启动 Python。

    学习目标

    把赋值语句追踪为“名字绑定到对象”,并预测重新绑定一个名字不会改变另一个名字所引用的对象。

    操作指引

    必做任务:把下面的代码保存为 binding.py。运行之前,先预测三行输出中的每一行,并为每条赋值语句画一个从名字指向其所引用列表对象的箭头。

    x = ["draft"]
    y = x
    x = ["replaced"]
    print(y)
    print(x)
    print(x is y)

    运行 python3 binding.py,记录准确的输出,并解释第 3 行改变了哪个绑定、哪个绑定没有改变。

    选做任务:只有在必做证据完成之后,才在第 3 行前后加入 print(id(x), id(y)),并描述发生了什么变化。

    自主演练与记录

    预测下面程序的三行输出,运行它,并解释哪个名字被重新绑定了:

    x = ["draft"]
    y = x
    x = ["replaced"]
    print(y)
    print(x)
    print(x is y)

    客观知识测验与诊断追踪

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

    声明辅助条件

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

    1.

    执行 x = ["draft"]; y = x; x = ["replaced"] 之后,print(y) 显示什么?

    作答应证与历史记录

      活动掌握标准

      你的预测记录和观察到的输出包含上面三行准确内容,箭头图显示第 3 行之后 y 仍绑定在原来的列表上,并且解释中说明赋值是重新绑定名字,而不是覆盖对象。记录中需写明必做/选做的边界,并声明未使用 AI 辅助。

      权威源资源与权利证明

      linking PSF License Version 2

      Python Standard Library: Built-in Types

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

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

      验证版本与日期: Python 3.12 documentation (verified 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 | 原始出处链接 ↗

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

      验证版本与日期: Verified 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 分钟

      小改动:让报告更安全

      Agent 辅助工程检查:需声明你授予的权限与审查边界;Agent 的输出不构成独立掌握证据。

      前置要求

      已完成 Day 04 的活动 1~2;已安装 Git 并配置 user.name 和 user.email;有一个可以由你指挥的 AI 编程 Agent。

      学习目标

      指挥 Agent 做一个小而可审查的改动,把含糊的文本标签替换为 repr/类型报告,然后亲自核查 diff,并只提交这一处改动。

      操作指引

      必做任务:创建一个包含原始误导性报告的练习仓库:

      git init report-demo && cd report-demo
      printf 'count = "0"\nprint("count=" + count)\n' > report.py
      git add report.py && git commit -m "Add count report"
      python3 report.py

      该程序打印 count=0,掩盖了 count 是文本 "0" 而不是数字 0 的事实。原始的 report.py 是:

      count = "0"
      print("count=" + count)

      请让 Agent 只修改 report.py 中的 print 行,使其显示 count 的 repr 和类型。声明你授予的权限(例如:只允许编辑 report.py,不允许提交)。在运行任何东西之前,先预测新的输出。然后由你自己审查并提交:

      git status --short
      git diff -- report.py
      git diff --check
      python3 report.py
      git add report.py
      git commit -m "Show repr and type in count report"
      git status --short

      如果 git status 列出了 report.py 以外的文件(例如 ?? notes.txt),那就是无关改动:不要暂存它,在提交前删除或还原它。

      选做任务:只有在必做证据完成之后,才让 Agent 再打印 bool(count),并用同样的方式审查第二个 diff。

      自主演练与记录

      从下面的 report.py 开始:

      count = "0"
      print("count=" + count)

      让 Agent 修改 print 行,使输出为 count='0' type=str。记录你对新输出的预测、你审查过的 git status --short 与 git diff -- report.py 的输出、git diff --check 的结果,以及你创建的提交。拒绝 Agent 创建的任何无关文件。

      客观知识测验与诊断追踪

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

      声明辅助条件

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

      1.

      在提交 Agent 的改动之前,git status --short 显示 M report.py 和 ?? notes.txt。你从未要求创建 notes.txt。安全的下一步是什么?

      作答应证与历史记录

        活动掌握标准

        你的记录包含:你的预测、显示只改动了 print 行的已审查 git diff、git diff --check 的结果、观察到的输出 count='0' type=str、只涉及 report.py 的提交,以及你授予 Agent 的权限声明。记录中需写明必做/选做的边界,并声明这项工作使用了 Agent 辅助。

        权威源资源与权利证明

        linking PSF License Version 2

        Python Standard Library: Built-in Types

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

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

        验证版本与日期: Python 3.12 documentation (verified 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 | 原始出处链接 ↗

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

        验证版本与日期: Verified 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 辅助)。

        前置要求

        已完成 Day 04 的活动 1~3。

        学习目标

        在不借助任何 AI 的情况下,预测三个关于值与绑定的短代码片段的输出,通过运行加以核对,并解释任何不一致的根本原因。

        操作指引

        必做任务:不使用 AI,在运行任何片段之前,先写下下面三个片段每一行输出的预测。然后运行每个片段(例如保存为 a.py、b.py、c.py),记录准确的输出,并给每一行标注“一致”或“不一致”。选一个不一致之处解释其根本原因;如果全部一致,就解释你认为最难的那个片段。

        片段 A:

        print(repr(None), repr("None"), None == "None")

        片段 B:

        a = "draft"
        b = a
        a = a + "!"
        print(a, b)

        片段 C:

        items = ["draft"]
        alias = items
        items = items + ["final"]
        print(alias, items)
        print(alias is items)

        选做任务:只有在必做证据完成之后,才修改某个片段中的一个输入(例如把片段 B 中的 "!" 换成 "?"),先预测再重新运行。

        自主演练与记录

        先预测、再运行下面三个片段,并把预测与准确输出并排记录:

        片段 A:

        print(repr(None), repr("None"), None == "None")

        片段 B:

        a = "draft"
        b = a
        a = a + "!"
        print(a, b)

        片段 C:

        items = ["draft"]
        alias = items
        items = items + ["final"]
        print(alias, items)
        print(alias is items)

        从值与绑定的角度解释一个不一致之处(或你认为最难的片段)。

        客观知识测验与诊断追踪

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

        声明辅助条件

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

        1.

        n = 5; m = n; n = n + 1; print(m, n) 会输出什么?

        作答应证与历史记录

          活动掌握标准

          你的记录显示:运行前写下的预测、与上文一致的三个片段的准确观察输出,以及从值与绑定角度对一个不一致之处(或最难片段)的正确根因解释。记录中需写明必做/选做的边界,并声明未使用 AI 辅助。

          权威源资源与权利证明

          linking PSF License Version 2

          Python Standard Library: Built-in Types

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

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

          验证版本与日期: Python 3.12 documentation (verified 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 | 原始出处链接 ↗

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

          验证版本与日期: Verified 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]

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