{ "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." } }