Files

66 lines
3.0 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 第 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. 是否保留了完整题目和验收说明。