66 lines
3.0 KiB
Python
66 lines
3.0 KiB
Python
# 第 2-4 课课堂练习:推导式与简化写法
|
||
#
|
||
# 请先阅读讲义并运行完整示例,再按照题目顺序完成。
|
||
# 每个函数都需要使用 return 返回结果,不要只在函数中 print()。
|
||
# 不要删除题目、测试数据、预期结果和自查注释。
|
||
|
||
|
||
# 第一部分:定义 get_agent_names(agents) 函数
|
||
# 1. 使用列表推导式遍历 agents。
|
||
# 2. 取出每个字典中的 name。
|
||
# 3. return 生成的新列表,不要修改原列表。
|
||
# 4. 调用后保存结果并输出。
|
||
# 5. 预期结果:['代码助手', '聊天助手', '测试助手']。
|
||
|
||
# 第二部分:定义 get_enabled_agent_names(agents) 函数
|
||
# 1. 使用带 if 的列表推导式。
|
||
# 2. 只保留 enabled 为 True 的 Agent 名称。
|
||
# 3. return 新列表。
|
||
# 4. 预期结果:['代码助手', '测试助手']。
|
||
|
||
# 第三部分:定义 get_model_mapping(agents) 函数
|
||
# 1. 使用字典推导式。
|
||
# 2. 字典的键是 Agent 名称,值是模型名称。
|
||
# 3. return 新字典。
|
||
# 4. 预期结果:
|
||
# {'代码助手': 'gpt-5', '聊天助手': 'o3', '测试助手': 'gpt-5'}。
|
||
|
||
# 第四部分:定义 get_unique_tools(agents) 函数
|
||
# 1. 使用集合推导式和两层 for。
|
||
# 2. 外层遍历 agents,内层遍历每个 agent.get("tools", [])。
|
||
# 3. return 不重复的工具集合。
|
||
# 4. 预期集合包含:搜索、终端、测试。
|
||
# 5. 集合没有固定顺序,验收时比较内容,不比较显示顺序。
|
||
|
||
# 第五部分:定义 get_status_text(enabled) 函数
|
||
# 1. 使用条件表达式,不使用多行 if...else。
|
||
# 2. enabled 为 True 时 return "启用",否则 return "停用"。
|
||
# 3. 分别传入 True 和 False。
|
||
# 4. 预期结果分别是“启用”和“停用”。
|
||
|
||
# 第六部分:定义 main() 函数
|
||
# 1. 依次调用前面五个函数,并把每个返回值保存到有意义的变量中。
|
||
# 2. 使用 print() 输出所有 Agent 名称、启用名称、模型字典和工具集合。
|
||
# 3. 调用 get_status_text(agents[0]["enabled"]) 并输出第一个 Agent 的状态。
|
||
# 4. 添加程序入口判断,直接运行本文件时调用 main()。
|
||
|
||
# 最终验收测试:
|
||
# 1. get_agent_names(agents) 返回三个名称;
|
||
# 2. get_enabled_agent_names(agents) 只返回两个启用的名称;
|
||
# 3. get_model_mapping(agents) 返回名称到模型的正确映射;
|
||
# 4. get_unique_tools(agents) 返回三个不重复工具;
|
||
# 5. get_status_text(True) 返回“启用”;
|
||
# 6. get_status_text(False) 返回“停用”;
|
||
# 7. 所有函数都使用 return 返回结果;
|
||
# 8. 推导式没有修改原始 agents;
|
||
# 9. 没有使用嵌套条件表达式或难以阅读的复杂推导式。
|
||
|
||
|
||
# 完成后自查:
|
||
# 1. 是否能从左到右解释每个推导式的执行过程;
|
||
# 2. 是否分清列表、字典和集合推导式使用的括号;
|
||
# 3. 是否知道筛选条件写在推导式末尾;
|
||
# 4. 是否知道条件表达式的结果分别写在 if 两侧;
|
||
# 5. 是否优先保证可读性,而不是一味缩短代码;
|
||
# 6. 是否保留了完整题目和验收说明。
|