Files

2255 lines
76 KiB
JSON

{
"schema_version": "course_catalog.v1",
"catalog_version": "practical-python-2026-05",
"units": [
{
"id": "introduction",
"title": "入门与基础",
"order": 1,
"source_path": "summaries/01_Introduction__00_Overview.md",
"metadata": {
"source_title": "Introduction"
}
},
{
"id": "working-with-data",
"title": "数据处理",
"order": 2,
"source_path": "summaries/02_Working_with_data__00_Overview.md",
"metadata": {
"source_title": "Working With Data"
}
},
{
"id": "program-organization",
"title": "程序组织",
"order": 3,
"source_path": "summaries/03_Program_organization__00_Overview.md",
"metadata": {
"source_title": "Program Organization"
}
},
{
"id": "classes-and-objects",
"title": "类与对象",
"order": 4,
"source_path": "summaries/04_Classes_objects__00_Overview.md",
"metadata": {
"source_title": "Classes and Objects"
}
},
{
"id": "object-model",
"title": "对象模型",
"order": 5,
"source_path": "summaries/05_Object_model__00_Overview.md",
"metadata": {
"source_title": "Object Model"
}
},
{
"id": "generators",
"title": "生成器",
"order": 6,
"source_path": "summaries/06_Generators__00_Overview.md",
"metadata": {
"source_title": "Generators"
}
},
{
"id": "advanced-topics",
"title": "进阶主题",
"order": 7,
"source_path": "summaries/07_Advanced_Topics__00_Overview.md",
"metadata": {
"source_title": "Advanced Topics"
}
},
{
"id": "testing-debugging",
"title": "测试与调试",
"order": 8,
"source_path": "summaries/08_Testing_debugging__00_Overview.md",
"metadata": {
"source_title": "Testing and Debugging"
}
},
{
"id": "packages",
"title": "包与工程化",
"order": 9,
"source_path": "summaries/09_Packages__00_Overview.md",
"metadata": {
"source_title": "Packages"
}
}
],
"concepts": [
{
"id": "intro-python",
"title": "Python 交互式解释器",
"unit_id": "introduction",
"order": 1,
"source_path": "concepts/Python-交互式解释器.md",
"diagnostic_scope": true,
"aliases": [
"REPL",
"解释器"
],
"metadata": {
"root_concept": true,
"generated_practice": {
"enabled": true,
"policy": "Generate targeted practice from public KB concept metadata after diagnostic evidence identifies this gap."
}
}
},
{
"id": "variable",
"title": "变量与数据类型",
"unit_id": "introduction",
"order": 2,
"source_path": "concepts/变量与数据类型.md",
"diagnostic_scope": true,
"aliases": [
"变量",
"类型",
"数据类型"
],
"metadata": {
"generated_practice": {
"enabled": true,
"policy": "Generate targeted practice from public KB concept metadata after diagnostic evidence identifies this gap."
}
}
},
{
"id": "expression",
"title": "表达式与运算符",
"unit_id": "introduction",
"order": 3,
"source_path": "concepts/Python-运算符与表达式.md",
"diagnostic_scope": true,
"aliases": [
"运算符",
"表达式",
"operator"
],
"metadata": {
"generated_practice": {
"enabled": true,
"policy": "Generate targeted practice from public KB concept metadata after diagnostic evidence identifies this gap."
}
}
},
{
"id": "condition",
"title": "条件判断",
"unit_id": "introduction",
"order": 4,
"source_path": "concepts/Python-控制流与缩进.md",
"diagnostic_scope": true,
"aliases": [
"if",
"elif",
"else",
"分支"
],
"metadata": {
"generated_practice": {
"enabled": true,
"policy": "Generate targeted practice from public KB concept metadata after diagnostic evidence identifies this gap."
}
}
},
{
"id": "loop",
"title": "循环结构",
"unit_id": "introduction",
"order": 5,
"source_path": "concepts/Python-控制流与缩进.md",
"diagnostic_scope": true,
"aliases": [
"循环",
"for",
"while",
"range",
"遍历"
],
"metadata": {
"generated_practice": {
"enabled": true,
"policy": "Generate targeted practice from public KB concept metadata after diagnostic evidence identifies this gap."
}
}
},
{
"id": "string",
"title": "字符串处理",
"unit_id": "introduction",
"order": 6,
"source_path": "concepts/字符串处理.md",
"diagnostic_scope": true,
"aliases": [
"str",
"f-string",
"格式化"
],
"metadata": {
"generated_practice": {
"enabled": true,
"policy": "Generate targeted practice from public KB concept metadata after diagnostic evidence identifies this gap."
}
}
},
{
"id": "list",
"title": "列表",
"unit_id": "introduction",
"order": 7,
"source_path": "concepts/列表与序列.md",
"diagnostic_scope": true,
"aliases": [
"list",
"序列"
],
"metadata": {
"generated_practice": {
"enabled": true,
"policy": "Generate targeted practice from public KB concept metadata after diagnostic evidence identifies this gap."
}
}
},
{
"id": "file_io",
"title": "文件读写",
"unit_id": "introduction",
"order": 8,
"source_path": "concepts/文件读写.md",
"diagnostic_scope": true,
"aliases": [
"文件",
"open",
"读文件"
],
"metadata": {
"generated_practice": {
"enabled": true,
"policy": "Generate targeted practice from public KB concept metadata after diagnostic evidence identifies this gap."
}
}
},
{
"id": "function",
"title": "函数",
"unit_id": "introduction",
"order": 9,
"source_path": "concepts/函数.md",
"diagnostic_scope": true,
"aliases": [
"def",
"return",
"参数"
],
"metadata": {
"generated_practice": {
"enabled": true,
"policy": "Generate targeted practice from public KB concept metadata after diagnostic evidence identifies this gap."
}
}
},
{
"id": "tuple",
"title": "元组与解包",
"unit_id": "working-with-data",
"order": 10,
"source_path": "concepts/元组与解包.md",
"diagnostic_scope": true,
"aliases": [
"tuple",
"unpack"
],
"metadata": {
"generated_practice": {
"enabled": true,
"policy": "Generate targeted practice from public KB concept metadata after diagnostic evidence identifies this gap."
}
}
},
{
"id": "dict",
"title": "字典",
"unit_id": "working-with-data",
"order": 11,
"source_path": "concepts/字典与数据建模.md",
"diagnostic_scope": true,
"aliases": [
"dict",
"映射"
],
"metadata": {
"generated_practice": {
"enabled": true,
"policy": "Generate targeted practice from public KB concept metadata after diagnostic evidence identifies this gap."
}
}
},
{
"id": "set",
"title": "集合与集合运算",
"unit_id": "working-with-data",
"order": 12,
"source_path": "concepts/集合与集合运算.md",
"diagnostic_scope": false,
"aliases": [
"set",
"去重"
],
"metadata": {}
},
{
"id": "csv-data",
"title": "CSV 数据处理",
"unit_id": "working-with-data",
"order": 13,
"source_path": "concepts/CSV-数据处理.md",
"diagnostic_scope": true,
"aliases": [
"csv",
"表格数据"
],
"metadata": {
"generated_practice": {
"enabled": true,
"policy": "Generate targeted practice from public KB concept metadata after diagnostic evidence identifies this gap."
}
}
},
{
"id": "data-cleaning",
"title": "数据清洗与类型转换",
"unit_id": "working-with-data",
"order": 14,
"source_path": "concepts/数据清洗与类型转换.md",
"diagnostic_scope": true,
"aliases": [
"类型转换",
"cleaning"
],
"metadata": {
"generated_practice": {
"enabled": true,
"policy": "Generate targeted practice from public KB concept metadata after diagnostic evidence identifies this gap."
}
}
},
{
"id": "counter-summary",
"title": "数据计数与汇总",
"unit_id": "working-with-data",
"order": 15,
"source_path": "concepts/数据计数与汇总.md",
"diagnostic_scope": false,
"aliases": [
"Counter",
"汇总"
],
"metadata": {}
},
{
"id": "function-parameters",
"title": "函数参数",
"unit_id": "program-organization",
"order": 16,
"source_path": "concepts/Python-函数参数.md",
"diagnostic_scope": true,
"aliases": [
"args",
"kwargs",
"默认参数"
],
"metadata": {
"generated_practice": {
"enabled": true,
"policy": "Generate targeted practice from public KB concept metadata after diagnostic evidence identifies this gap."
}
}
},
{
"id": "script-main",
"title": "main 函数与脚本结构",
"unit_id": "program-organization",
"order": 17,
"source_path": "concepts/main-函数与脚本结构.md",
"diagnostic_scope": true,
"aliases": [
"__main__",
"脚本"
],
"metadata": {
"generated_practice": {
"enabled": true,
"policy": "Generate targeted practice from public KB concept metadata after diagnostic evidence identifies this gap."
}
}
},
{
"id": "module_package",
"title": "模块与包",
"unit_id": "program-organization",
"order": 18,
"source_path": "concepts/Python-包结构.md",
"diagnostic_scope": true,
"aliases": [
"import",
"模块",
"包"
],
"metadata": {
"generated_practice": {
"enabled": true,
"policy": "Generate targeted practice from public KB concept metadata after diagnostic evidence identifies this gap."
}
}
},
{
"id": "exception",
"title": "异常处理",
"unit_id": "program-organization",
"order": 19,
"source_path": "concepts/异常处理.md",
"diagnostic_scope": true,
"aliases": [
"try",
"except",
"traceback"
],
"metadata": {
"generated_practice": {
"enabled": true,
"policy": "Generate targeted practice from public KB concept metadata after diagnostic evidence identifies this gap."
}
}
},
{
"id": "oop",
"title": "类与对象",
"unit_id": "classes-and-objects",
"order": 20,
"source_path": "concepts/类与对象.md",
"diagnostic_scope": true,
"aliases": [
"class",
"对象",
"类"
],
"metadata": {
"generated_practice": {
"enabled": true,
"policy": "Generate targeted practice from public KB concept metadata after diagnostic evidence identifies this gap."
}
}
},
{
"id": "inheritance",
"title": "继承与多态",
"unit_id": "classes-and-objects",
"order": 21,
"source_path": "concepts/继承与多态.md",
"diagnostic_scope": false,
"aliases": [
"继承",
"多态"
],
"metadata": {}
},
{
"id": "python-object-model",
"title": "Python 对象模型",
"unit_id": "object-model",
"order": 22,
"source_path": "concepts/Python-对象模型.md",
"diagnostic_scope": false,
"aliases": [
"对象模型",
"引用"
],
"metadata": {},
"previous_ids": [
"object-model"
]
},
{
"id": "property",
"title": "Python property 属性",
"unit_id": "object-model",
"order": 23,
"source_path": "concepts/Python-property-属性.md",
"diagnostic_scope": false,
"aliases": [
"property",
"属性"
],
"metadata": {}
},
{
"id": "mro",
"title": "方法解析顺序 MRO",
"unit_id": "object-model",
"order": 24,
"source_path": "concepts/方法解析顺序-MRO.md",
"diagnostic_scope": false,
"aliases": [
"MRO",
"super"
],
"metadata": {}
},
{
"id": "generator",
"title": "迭代协议与生成器",
"unit_id": "generators",
"order": 25,
"source_path": "concepts/迭代协议与生成器.md",
"diagnostic_scope": false,
"aliases": [
"yield",
"iterator",
"生成器"
],
"metadata": {}
},
{
"id": "context-manager",
"title": "上下文管理器",
"unit_id": "generators",
"order": 26,
"source_path": "concepts/上下文管理器.md",
"diagnostic_scope": false,
"aliases": [
"with",
"context manager"
],
"metadata": {}
},
{
"id": "decorator",
"title": "装饰器",
"unit_id": "advanced-topics",
"order": 27,
"source_path": "concepts/Python-装饰器.md",
"diagnostic_scope": false,
"aliases": [
"decorator",
"@"
],
"metadata": {}
},
{
"id": "closure",
"title": "闭包",
"unit_id": "advanced-topics",
"order": 28,
"source_path": "concepts/闭包.md",
"diagnostic_scope": false,
"aliases": [
"closure"
],
"metadata": {}
},
{
"id": "pytest",
"title": "pytest",
"unit_id": "testing-debugging",
"order": 29,
"source_path": "concepts/pytest.md",
"diagnostic_scope": true,
"aliases": [
"测试",
"unit test"
],
"metadata": {
"generated_practice": {
"enabled": true,
"policy": "Generate targeted practice from public KB concept metadata after diagnostic evidence identifies this gap."
}
}
},
{
"id": "debugging_testing",
"title": "调试与测试",
"unit_id": "testing-debugging",
"order": 30,
"source_path": "concepts/测试-日志与调试.md",
"diagnostic_scope": true,
"aliases": [
"pytest",
"pdb",
"测试",
"调试"
],
"metadata": {
"generated_practice": {
"enabled": true,
"policy": "Generate targeted practice from public KB concept metadata after diagnostic evidence identifies this gap."
}
}
},
{
"id": "pdb",
"title": "Python pdb 调试器",
"unit_id": "testing-debugging",
"order": 31,
"source_path": "concepts/Python-pdb-调试器.md",
"diagnostic_scope": false,
"aliases": [
"pdb",
"断点"
],
"metadata": {}
},
{
"id": "packaging",
"title": "现代 Python 打包实践",
"unit_id": "packages",
"order": 32,
"source_path": "concepts/现代-Python-打包实践.md",
"diagnostic_scope": false,
"aliases": [
"package",
"打包"
],
"metadata": {}
},
{
"id": "pip",
"title": "pip 与 PyPI",
"unit_id": "packages",
"order": 33,
"source_path": "concepts/pip-与-PyPI.md",
"diagnostic_scope": false,
"aliases": [
"pip",
"PyPI"
],
"metadata": {}
},
{
"id": "project_practice",
"title": "课程练习工作流",
"unit_id": "packages",
"order": 34,
"source_path": "concepts/课程练习工作流.md",
"diagnostic_scope": true,
"aliases": [
"项目",
"练习工作流"
],
"metadata": {
"generated_practice": {
"enabled": true,
"policy": "Generate targeted practice from public KB concept metadata after diagnostic evidence identifies this gap."
}
}
}
],
"mistake_tags": [
{
"id": "kb-syntax-error",
"name": "语法错误",
"description": "语法、缩进或关键字大小写导致代码无法解析。",
"concept_ids": [
"intro-python",
"condition",
"loop",
"function"
],
"source_path": "concepts/Python-控制流与缩进.md",
"order": 1,
"metadata": {
"teaching_intent": "语法、缩进或关键字大小写导致代码无法解析。",
"evidence_type": "diagnostic_response",
"severity": "high",
"symptoms": [
"语法、缩进或关键字大小写导致代码无法解析。"
],
"remediation_concept_ids": [
"intro-python",
"condition",
"loop",
"function"
]
}
},
{
"id": "kb-type-conversion",
"name": "类型转换错误",
"description": "类型假设、类型转换、ValueError 或 TypeError 相关问题。",
"concept_ids": [
"variable",
"expression",
"data-cleaning"
],
"source_path": "concepts/数据清洗与类型转换.md",
"order": 2,
"metadata": {
"teaching_intent": "类型假设、类型转换、ValueError 或 TypeError 相关问题。",
"evidence_type": "diagnostic_response",
"severity": "medium",
"symptoms": [
"类型假设、类型转换、ValueError 或 TypeError 相关问题。"
],
"remediation_concept_ids": [
"variable",
"expression",
"data-cleaning"
]
}
},
{
"id": "kb-output-format",
"name": "输出格式问题",
"description": "print、字符串格式化或输出格式不符合题目要求。",
"concept_ids": [
"string",
"file_io",
"debugging_testing"
],
"source_path": "concepts/字符串处理.md",
"order": 3,
"metadata": {
"teaching_intent": "print、字符串格式化或输出格式不符合题目要求。",
"evidence_type": "diagnostic_response",
"severity": "medium",
"symptoms": [
"print、字符串格式化或输出格式不符合题目要求。"
],
"remediation_concept_ids": [
"string",
"file_io",
"debugging_testing"
]
}
},
{
"id": "kb-range-boundary",
"name": "范围与边界问题",
"description": "range、索引、切片或边界条件处理错误。",
"concept_ids": [
"loop",
"list"
],
"source_path": "concepts/列表与序列.md",
"order": 4,
"metadata": {
"teaching_intent": "range、索引、切片或边界条件处理错误。",
"evidence_type": "diagnostic_response",
"severity": "medium",
"symptoms": [
"range、索引、切片或边界条件处理错误。"
],
"remediation_concept_ids": [
"loop",
"list"
]
}
},
{
"id": "kb-state-update",
"name": "状态更新问题",
"description": "循环条件、累计变量或状态更新逻辑错误。",
"concept_ids": [
"loop",
"counter-summary"
],
"source_path": "concepts/数据计数与汇总.md",
"order": 5,
"metadata": {
"teaching_intent": "循环条件、累计变量或状态更新逻辑错误。",
"evidence_type": "diagnostic_response",
"severity": "medium",
"symptoms": [
"循环条件、累计变量或状态更新逻辑错误。"
],
"remediation_concept_ids": [
"loop",
"counter-summary"
]
}
}
],
"relations": [
{
"from": "expression",
"to": "variable",
"type": "prerequisite",
"metadata": {
"rationale": "Prerequisite declared by the KB course catalog for diagnostic and remediation ordering."
}
},
{
"from": "condition",
"to": "expression",
"type": "prerequisite",
"metadata": {
"rationale": "Prerequisite declared by the KB course catalog for diagnostic and remediation ordering."
}
},
{
"from": "loop",
"to": "condition",
"type": "prerequisite",
"metadata": {
"rationale": "Prerequisite declared by the KB course catalog for diagnostic and remediation ordering."
}
},
{
"from": "list",
"to": "loop",
"type": "prerequisite",
"metadata": {
"rationale": "Prerequisite declared by the KB course catalog for diagnostic and remediation ordering."
}
},
{
"from": "function",
"to": "variable",
"type": "prerequisite",
"metadata": {
"rationale": "Prerequisite declared by the KB course catalog for diagnostic and remediation ordering."
}
},
{
"from": "dict",
"to": "list",
"type": "prerequisite",
"metadata": {
"rationale": "Prerequisite declared by the KB course catalog for diagnostic and remediation ordering."
}
},
{
"from": "csv-data",
"to": "file_io",
"type": "prerequisite",
"metadata": {
"rationale": "Prerequisite declared by the KB course catalog for diagnostic and remediation ordering."
}
},
{
"from": "script-main",
"to": "function",
"type": "prerequisite",
"metadata": {
"rationale": "Prerequisite declared by the KB course catalog for diagnostic and remediation ordering."
}
},
{
"from": "oop",
"to": "dict",
"type": "prerequisite",
"metadata": {
"rationale": "Prerequisite declared by the KB course catalog for diagnostic and remediation ordering."
}
},
{
"from": "pytest",
"to": "function",
"type": "prerequisite",
"metadata": {
"rationale": "Prerequisite declared by the KB course catalog for diagnostic and remediation ordering."
}
},
{
"from": "variable",
"to": "intro-python",
"type": "follows",
"weight": 0.5,
"metadata": {
"rationale": "Sequential catalog progression retained as explicit KB-owned structure."
}
},
{
"from": "string",
"to": "loop",
"type": "follows",
"weight": 0.5,
"metadata": {
"rationale": "Sequential catalog progression retained as explicit KB-owned structure."
}
},
{
"from": "file_io",
"to": "list",
"type": "follows",
"weight": 0.5,
"metadata": {
"rationale": "Sequential catalog progression retained as explicit KB-owned structure."
}
},
{
"from": "tuple",
"to": "function",
"type": "follows",
"weight": 0.5,
"metadata": {
"rationale": "Sequential catalog progression retained as explicit KB-owned structure."
}
},
{
"from": "set",
"to": "dict",
"type": "follows",
"weight": 0.5,
"metadata": {
"rationale": "Sequential catalog progression retained as explicit KB-owned structure."
}
},
{
"from": "data-cleaning",
"to": "csv-data",
"type": "follows",
"weight": 0.5,
"metadata": {
"rationale": "Sequential catalog progression retained as explicit KB-owned structure."
}
},
{
"from": "counter-summary",
"to": "data-cleaning",
"type": "follows",
"weight": 0.5,
"metadata": {
"rationale": "Sequential catalog progression retained as explicit KB-owned structure."
}
},
{
"from": "function-parameters",
"to": "counter-summary",
"type": "follows",
"weight": 0.5,
"metadata": {
"rationale": "Sequential catalog progression retained as explicit KB-owned structure."
}
},
{
"from": "module_package",
"to": "script-main",
"type": "follows",
"weight": 0.5,
"metadata": {
"rationale": "Sequential catalog progression retained as explicit KB-owned structure."
}
},
{
"from": "exception",
"to": "module_package",
"type": "follows",
"weight": 0.5,
"metadata": {
"rationale": "Sequential catalog progression retained as explicit KB-owned structure."
}
},
{
"from": "inheritance",
"to": "oop",
"type": "follows",
"weight": 0.5,
"metadata": {
"rationale": "Sequential catalog progression retained as explicit KB-owned structure."
}
},
{
"from": "python-object-model",
"to": "inheritance",
"type": "follows",
"weight": 0.5,
"metadata": {
"rationale": "Sequential catalog progression retained as explicit KB-owned structure."
}
},
{
"from": "property",
"to": "python-object-model",
"type": "follows",
"weight": 0.5,
"metadata": {
"rationale": "Sequential catalog progression retained as explicit KB-owned structure."
}
},
{
"from": "mro",
"to": "property",
"type": "follows",
"weight": 0.5,
"metadata": {
"rationale": "Sequential catalog progression retained as explicit KB-owned structure."
}
},
{
"from": "generator",
"to": "mro",
"type": "follows",
"weight": 0.5,
"metadata": {
"rationale": "Sequential catalog progression retained as explicit KB-owned structure."
}
},
{
"from": "context-manager",
"to": "generator",
"type": "follows",
"weight": 0.5,
"metadata": {
"rationale": "Sequential catalog progression retained as explicit KB-owned structure."
}
},
{
"from": "decorator",
"to": "context-manager",
"type": "follows",
"weight": 0.5,
"metadata": {
"rationale": "Sequential catalog progression retained as explicit KB-owned structure."
}
},
{
"from": "closure",
"to": "decorator",
"type": "follows",
"weight": 0.5,
"metadata": {
"rationale": "Sequential catalog progression retained as explicit KB-owned structure."
}
},
{
"from": "debugging_testing",
"to": "pytest",
"type": "follows",
"weight": 0.5,
"metadata": {
"rationale": "Sequential catalog progression retained as explicit KB-owned structure."
}
},
{
"from": "pdb",
"to": "debugging_testing",
"type": "follows",
"weight": 0.5,
"metadata": {
"rationale": "Sequential catalog progression retained as explicit KB-owned structure."
}
},
{
"from": "packaging",
"to": "pdb",
"type": "follows",
"weight": 0.5,
"metadata": {
"rationale": "Sequential catalog progression retained as explicit KB-owned structure."
}
},
{
"from": "pip",
"to": "packaging",
"type": "follows",
"weight": 0.5,
"metadata": {
"rationale": "Sequential catalog progression retained as explicit KB-owned structure."
}
},
{
"from": "project_practice",
"to": "pip",
"type": "follows",
"weight": 0.5,
"metadata": {
"rationale": "Sequential catalog progression retained as explicit KB-owned structure."
}
}
],
"exercises": [
{
"id": "practical-python-1.1",
"title": "Using Python as a Calculator",
"source_path": "exercises/1-1-using-python-as-a-calculator.md",
"concept_ids": [
"expression"
],
"order": 1,
"difficulty": 1,
"metadata": {}
},
{
"id": "practical-python-1.5",
"title": "The Bouncing Ball",
"source_path": "exercises/1-5-the-bouncing-ball.md",
"concept_ids": [
"loop",
"expression"
],
"order": 2,
"difficulty": 1,
"metadata": {}
},
{
"id": "practical-python-1.6",
"title": "Debugging",
"source_path": "exercises/1-6-debugging.md",
"concept_ids": [
"debugging_testing"
],
"order": 3,
"difficulty": 1,
"metadata": {}
},
{
"id": "practical-python-1.7",
"title": "Dave's Mortgage",
"source_path": "exercises/1-7-dave-s-mortgage.md",
"concept_ids": [
"loop",
"expression"
],
"order": 4,
"difficulty": 2,
"metadata": {}
},
{
"id": "practical-python-1.20",
"title": "Looping over List Items",
"source_path": "exercises/1-20-looping-over-list-items.md",
"concept_ids": [
"list",
"loop"
],
"order": 5,
"difficulty": 2,
"metadata": {}
},
{
"id": "practical-python-1.27",
"title": "Reading a Data File",
"source_path": "exercises/1-27-reading-a-data-file.md",
"concept_ids": [
"file_io"
],
"order": 6,
"difficulty": 2,
"metadata": {}
},
{
"id": "practical-python-1.29",
"title": "Defining a Function",
"source_path": "exercises/1-29-defining-a-function.md",
"concept_ids": [
"function"
],
"order": 7,
"difficulty": 2,
"metadata": {}
},
{
"id": "practical-python-2.1",
"title": "Tuples",
"source_path": "exercises/2-1-tuples.md",
"concept_ids": [
"tuple"
],
"order": 8,
"difficulty": 2,
"metadata": {}
},
{
"id": "practical-python-2.2",
"title": "Dictionaries as a Data Structure",
"source_path": "exercises/2-2-dictionaries-as-a-data-structure.md",
"concept_ids": [
"dict"
],
"order": 9,
"difficulty": 2,
"metadata": {}
},
{
"id": "practical-python-2.13",
"title": "Counting",
"source_path": "exercises/2-13-counting.md",
"concept_ids": [
"counter-summary",
"dict"
],
"order": 10,
"difficulty": 2,
"metadata": {}
},
{
"id": "practical-python-2.19",
"title": "List Comprehensions",
"source_path": "exercises/2-19-list-comprehensions.md",
"concept_ids": [
"list"
],
"order": 11,
"difficulty": 2,
"metadata": {}
},
{
"id": "practical-python-2.23",
"title": "Extracting Data from CSV Files",
"source_path": "exercises/2-23-extracting-data-from-csv-files.md",
"concept_ids": [
"csv-data",
"file_io"
],
"order": 12,
"difficulty": 3,
"metadata": {}
},
{
"id": "practical-python-3.1",
"title": "Structuring a Program as Functions",
"source_path": "exercises/3-1-structuring-a-program-as-a-collection-of-functions.md",
"concept_ids": [
"function"
],
"order": 13,
"difficulty": 3,
"metadata": {}
},
{
"id": "practical-python-3.3",
"title": "Reading CSV Files",
"source_path": "exercises/3-3-reading-csv-files.md",
"concept_ids": [
"csv-data",
"function"
],
"order": 14,
"difficulty": 3,
"metadata": {}
},
{
"id": "practical-python-3.8",
"title": "Raising Exceptions",
"source_path": "exercises/3-8-raising-exceptions.md",
"concept_ids": [
"exception"
],
"order": 15,
"difficulty": 3,
"metadata": {}
},
{
"id": "practical-python-3.11",
"title": "Module Imports",
"source_path": "exercises/3-11-module-imports.md",
"concept_ids": [
"module_package"
],
"order": 16,
"difficulty": 3,
"metadata": {}
},
{
"id": "practical-python-3.15",
"title": "Main Functions",
"source_path": "exercises/3-15-main-functions.md",
"concept_ids": [
"script-main"
],
"order": 17,
"difficulty": 3,
"metadata": {}
},
{
"id": "practical-python-4.1",
"title": "Objects as Data Structures",
"source_path": "exercises/4-1-objects-as-data-structures.md",
"concept_ids": [
"oop"
],
"order": 18,
"difficulty": 3,
"metadata": {}
},
{
"id": "practical-python-4.6",
"title": "Using Inheritance",
"source_path": "exercises/4-6-using-inheritance-to-produce-different-output.md",
"concept_ids": [
"inheritance"
],
"order": 19,
"difficulty": 4,
"metadata": {
"selection_context": {
"stage": "post-diagnostic-practice",
"after_concept_ids": [
"oop"
],
"purpose": "Advanced or enrichment exercise selected only after prerequisite active path is reached."
}
}
},
{
"id": "practical-python-5.1",
"title": "Representation of Instances",
"source_path": "exercises/5-1-representation-of-instances.md",
"concept_ids": [
"python-object-model"
],
"order": 20,
"difficulty": 4,
"metadata": {
"selection_context": {
"stage": "post-diagnostic-practice",
"after_concept_ids": [
"oop"
],
"purpose": "Advanced or enrichment exercise selected only after prerequisite active path is reached."
}
}
},
{
"id": "practical-python-5.6",
"title": "Simple Properties",
"source_path": "exercises/5-6-simple-properties.md",
"concept_ids": [
"property"
],
"order": 21,
"difficulty": 4,
"metadata": {
"selection_context": {
"stage": "post-diagnostic-practice",
"after_concept_ids": [
"oop"
],
"purpose": "Advanced or enrichment exercise selected only after prerequisite active path is reached."
}
}
},
{
"id": "practical-python-6.1",
"title": "Iteration Illustrated",
"source_path": "exercises/6-1-iteration-illustrated.md",
"concept_ids": [
"generator"
],
"order": 22,
"difficulty": 4,
"metadata": {
"selection_context": {
"stage": "post-diagnostic-practice",
"after_concept_ids": [
"oop"
],
"purpose": "Advanced or enrichment exercise selected only after prerequisite active path is reached."
}
}
},
{
"id": "practical-python-7.10",
"title": "A Decorator for Timing",
"source_path": "exercises/7-10-a-decorator-for-timing.md",
"concept_ids": [
"decorator"
],
"order": 23,
"difficulty": 4,
"metadata": {
"selection_context": {
"stage": "post-diagnostic-practice",
"after_concept_ids": [
"oop"
],
"purpose": "Advanced or enrichment exercise selected only after prerequisite active path is reached."
}
}
},
{
"id": "practical-python-8.1",
"title": "Writing Unit Tests",
"source_path": "exercises/8-1-writing-unit-tests.md",
"concept_ids": [
"pytest"
],
"order": 24,
"difficulty": 3,
"metadata": {}
},
{
"id": "practical-python-9.1",
"title": "Making a Simple Package",
"source_path": "exercises/9-1-making-a-simple-package.md",
"concept_ids": [
"packaging",
"module_package"
],
"order": 25,
"difficulty": 4,
"metadata": {}
}
],
"inventory": {
"concepts": [
{
"source_path": "concepts/绑定方法.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/包与虚拟环境.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/变量绑定.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/标准输入输出与管道.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/表格化输出.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/代码分发.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/单元测试.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/调用栈与-traceback.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/动态属性访问.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/断言.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/队列与滑动窗口.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/对象身份与相等性.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/浮点数精度.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/函数作为对象.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/环境变量与进程环境.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/回调函数.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/开源内容署名与相同方式共享.md",
"status": "support",
"reason": "Support reference material kept out of the active progress path."
},
{
"source_path": "concepts/可变性与引用.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/库接口设计.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/类型注解.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/列表推导式.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/流式数据处理.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/命令行参数.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/模块与-import.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/排序-key-函数.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/浅拷贝与深拷贝.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/软件测试.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/生产者消费者模式.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/生成器表达式.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/数据流管道.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/特殊方法.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/替代构造器.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/文件类对象.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/鸭子类型.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/延迟执行.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/依赖管理.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/正则表达式.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/CC-BY-SA-4-0.md",
"status": "support",
"reason": "Support reference material kept out of the active progress path."
},
{
"source_path": "concepts/Git-与课程仓库管理.md",
"status": "support",
"reason": "Support reference material kept out of the active progress path."
},
{
"source_path": "concepts/itertools-模块.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/Mixin-模式.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/None-与缺失值.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/Python-不可变对象.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/Python-参数传递.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/Python-导入缓存.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/Python-封装与访问约定.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/Python-开发环境.md",
"status": "support",
"reason": "Support reference material kept out of the active progress path."
},
{
"source_path": "concepts/Python-拷贝语义.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/Python-可变对象.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/Python-命名空间与作用域.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/Python-切片.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/Python-容器.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/Python-输入输出.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/Python-网络请求.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/Python-文档与帮助系统.md",
"status": "support",
"reason": "Support reference material kept out of the active progress path."
},
{
"source_path": "concepts/Python-项目组织.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/Python-真值测试.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/Python-自省.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/Python-slots.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/Python-staticmethod-与-classmethod.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/site-packages.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/Unicode-与编码.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
},
{
"source_path": "concepts/XML-解析.md",
"status": "deferred",
"reason": "Public KB concept deferred until teaching intent, relations, and practice metadata are reviewed for activation."
}
],
"exercises": [
{
"source_path": "exercises/1-10-making-a-table.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/1-11-bonus.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/1-12-a-mystery.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/1-13-extracting-individual-characters-and-substrings.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/1-14-string-concatenation.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/1-15-membership-testing-substring-testing.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/1-16-string-methods.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/1-17-f-strings.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/1-18-regular-expressions.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/1-19-extracting-and-reassigning-list-elements.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/1-2-getting-help.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/1-21-membership-tests.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/1-22-appending-inserting-and-deleting-items.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/1-23-sorting.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/1-24-putting-it-all-back-together.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/1-25-lists-of-anything.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/1-26-file-preliminaries.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/1-28-other-kinds-of-files.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/1-3-cutting-and-pasting.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/1-30-turning-a-script-into-a-function.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/1-31-error-handling.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/1-32-using-a-library-function.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/1-33-reading-from-the-command-line.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/1-4-where-is-my-bus.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/1-8-extra-payments.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/1-9-making-an-extra-payment-calculator.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/2-10-printing-a-formatted-table.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/2-11-adding-some-headers.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/2-12-formatting-challenge.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/2-14-more-sequence-operations.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/2-15-a-practical-enumerate-example.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/2-16-using-the-zip-function.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/2-17-inverting-a-dictionary.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/2-18-tabulating-with-counters.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/2-20-sequence-reductions.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/2-21-data-queries.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/2-22-data-extraction.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/2-24-first-class-data.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/2-25-making-dictionaries.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/2-26-the-big-picture.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/2-3-some-additional-dictionary-operations.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/2-4-a-list-of-tuples.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/2-5-list-of-dictionaries.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/2-6-dictionaries-as-a-container.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/2-7-finding-out-if-you-can-retire.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/2-8-how-to-format-numbers.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/2-9-collecting-data.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/3-10-silencing-errors.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/3-12-using-your-library-module.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/3-13-intentionally-left-blank-skip.md",
"status": "excluded",
"reason": "Original exercise is explicitly marked as skipped in the public course material."
},
{
"source_path": "exercises/3-14-using-more-library-imports.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/3-16-making-scripts.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/3-17-from-filenames-to-file-like-objects.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/3-18-fixing-existing-functions.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/3-2-creating-a-top-level-function-for-program-execution.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/3-4-building-a-column-selector.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/3-5-performing-type-conversion.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/3-6-working-without-headers.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/3-7-picking-a-different-column-delimiter.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/3-9-catching-exceptions.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/4-10-an-example-of-using-getattr.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/4-11-defining-a-custom-exception.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/4-2-adding-some-methods.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/4-3-creating-a-list-of-instances.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/4-4-using-your-class.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/4-5-an-extensibility-problem.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/4-7-polymorphism-in-action.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/4-8-putting-it-all-together.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/4-9-better-output-for-printing-objects.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/5-2-modification-of-instance-data.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/5-3-the-role-of-classes.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/5-4-bound-methods.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/5-5-inheritance.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/5-7-properties-and-setters.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/5-8-adding-slots.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/6-10-making-more-pipeline-components.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/6-11-filtering-data.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/6-12-putting-it-all-together.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/6-13-generator-expressions.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/6-14-generator-expressions-in-function-arguments.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/6-15-code-simplification.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/6-2-supporting-iteration.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/6-3-making-a-more-proper-container.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/6-4-a-simple-generator.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/6-5-monitoring-a-streaming-data-source.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/6-6-using-a-generator-to-produce-data.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/6-7-watching-your-portfolio.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/6-8-setting-up-a-simple-pipeline.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/6-9-setting-up-a-more-complex-pipeline.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/7-1-a-simple-example-of-variable-arguments.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/7-11-class-methods-in-practice.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/7-2-passing-tuple-and-dicts-as-arguments.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/7-3-creating-a-list-of-instances.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/7-4-argument-pass-through.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/7-5-sorting-on-a-field.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/7-6-sorting-on-a-field-with-lambda.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/7-7-using-closures-to-avoid-repetition.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/7-8-simplifying-function-calls.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/7-9-putting-it-into-practice.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/8-2-adding-logging-to-a-module.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/8-3-adding-logging-to-a-program.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/8-4-bugs-what-bugs.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/9-2-making-an-application-directory.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/9-3-top-level-scripts.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/9-4-creating-a-virtual-environment.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
},
{
"source_path": "exercises/9-5-make-a-package.md",
"status": "deferred",
"reason": "Public exercise deferred until concept links, difficulty, and selection context are reviewed for activation."
}
]
},
"course_setup": {
"title": "课程准备",
"status": "support",
"source_paths": [
"summaries/00_Setup.md",
"sources/00_Setup.md"
],
"reason": "Environment setup supports the learner but is not an active progress concept or diagnostic target."
}
}