feat(python基础): 完成基础综合项目

This commit is contained in:
zhiye.sun
2026-08-03 17:42:04 +08:00
parent 298e5b46ea
commit 42baf5d317
5 changed files with 706 additions and 127 deletions

View File

@@ -0,0 +1,135 @@
# 第 1-14 课课堂练习:命令行 Agent 管理系统
#
# 这是 Python 基础阶段综合项目,请按照题目顺序逐步完成。
# 完成要求:
# 1. 每完成一个函数就单独调用并测试,不要等全部写完再运行。
# 2. 需要查找结果时使用 return不要依赖全局变量传递结果。
# 3. 函数名和变量名使用有意义的英文蛇形命名。
# 4. 函数体使用四个空格缩进,并添加必要的中文注释。
# 5. 不要删除题目、测试数据、预期结果和自查注释。
# 6. 完成所有功能后,再执行末尾列出的九组验收测试。
# 第一部分:准备初始数据
# 创建列表 agents其中包含以下两个字典
# 1. name="代码助手"、model="gpt-5"、enabled=True、tools=["搜索", "终端"]
# 2. name="聊天助手"、model="o3"、enabled=False、tools=["搜索"]。
# 完成后临时使用 print(agents) 检查结构,确认每个 Agent 都是一个字典。
# 第二部分:定义 print_menu() 函数
# 1. 函数不接收参数,也不需要 return。
# 2. 使用 print() 输出以下菜单:
# 1. 查看全部 Agent
# 2. 新增 Agent
# 3. 修改 Agent 状态
# 4. 删除 Agent
# 5. 查看 Agent 工具
# 0. 退出程序
# 3. 单独调用一次 print_menu(),确认六个选项均正确显示。
# 第三部分:定义 get_status_text(enabled) 函数
# 1. 参数 enabled 接收布尔值。
# 2. enabled 为 True 时 return "启用",否则 return "停用"。
# 3. 分别传入 True 和 False保存并输出返回值。
# 4. 两次预期输出分别为“启用”和“停用”。
# 第四部分:定义 print_agents(agents) 函数
# 1. 参数 agents 接收 Agent 列表,本函数只负责输出,不需要 return。
# 2. 如果列表为空,输出“当前没有 Agent。”并提前结束函数。
# 3. 如果列表非空,使用 enumerate(agents, start=1) 遍历。
# 4. 调用 get_status_text() 得到中文状态。
# 5. 每条记录按照以下格式输出:
# 1. 代码助手模型gpt-5状态启用
# 6. 分别传入初始 agents 和空列表 [] 测试两个分支。
# 第五部分:定义 find_agent_by_name(agents, name) 函数
# 1. 遍历 agents比较 agent["name"] 和参数 name。
# 2. 找到同名 Agent 时,立即 return 对应的 Agent 字典。
# 3. 循环结束仍未找到时return None。
# 4. 查找“代码助手”,预期返回对应字典。
# 5. 查找“不存在的助手”,预期返回 None。
# 注意:本函数只负责查找,不在函数内部输出“找到”或“未找到”。
# 第六部分:定义 parse_tools(tools_text) 函数
# 1. 参数接收英文逗号分隔的工具文本。
# 2. 使用 tools_text.split(",") 拆分字符串。
# 3. 遍历拆分结果,对每个工具调用 strip()。
# 4. 只把非空且尚未存在的工具加入结果列表。
# 5. 使用 "搜索, 终端,搜索, ,计算器" 测试。
# 6. 预期返回 ["搜索", "终端", "计算器"]。
# 第七部分:定义 add_agent(agents) 函数
# 1. 输入 Agent 名称并清理两侧空白。
# 2. 名称为空时输出“Agent 名称不能为空。”并提前 return。
# 3. 调用 find_agent_by_name() 检查名称;重复时输出“该 Agent 已存在。”并 return。
# 4. 输入模型名称。
# 5. 输入英文逗号分隔的工具文本,并调用 parse_tools() 得到工具列表。
# 6. 创建包含 name、model、enabled 和 tools 的字典,新 Agent 默认 enabled=True。
# 7. 使用 agents.append() 添加字典并输出“Agent 新增成功。”。
# 8. 新增“搜索助手”后调用 print_agents(),预期列表共有三条记录。
# 第八部分:定义 change_agent_status(agents) 函数
# 1. 输入 Agent 名称并调用 find_agent_by_name()。
# 2. 未找到时输出“未找到该 Agent。”并提前 return。
# 3. 找到时执行 agent["enabled"] = not agent["enabled"]。
# 4. 调用 get_status_text() 得到修改后的中文状态并输出。
# 5. 修改“聊天助手”后,它的状态应由 False 变为 True。
# 第九部分:定义 delete_agent(agents) 函数
# 1. 输入 Agent 名称并调用 find_agent_by_name()。
# 2. 未找到时输出“未找到该 Agent。”并提前 return。
# 3. 找到时使用 agents.remove(agent) 删除整个字典。
# 4. 输出“Agent 已删除。”。
# 5. 删除“聊天助手”后调用 print_agents(),确认它不再出现。
# 第十部分:定义 print_agent_tools(agents) 函数
# 1. 输入 Agent 名称并调用 find_agent_by_name()。
# 2. 未找到时输出“未找到该 Agent。”并提前 return。
# 3. 使用 agent.get("tools", []) 安全读取工具列表。
# 4. 工具列表为空时输出“该 Agent 暂无工具。”并提前 return。
# 5. 有工具时使用 enumerate(tools, start=1) 遍历并按编号输出。
# 6. 查看“代码助手”时,预期依次显示“搜索”和“终端”。
# 第十一部分:定义 main() 函数
# 1. 在函数内部使用 while True 持续运行菜单。
# 2. 每轮先调用 print_menu(),再用 input() 接收菜单编号并调用 strip()。
# 3. 使用 if...elif...else 完成以下分发:
# "1" 调用 print_agents(agents)
# "2" 调用 add_agent(agents)
# "3" 调用 change_agent_status(agents)
# "4" 调用 delete_agent(agents)
# "5" 调用 print_agent_tools(agents)
# "0" 输出“程序已退出。”并使用 break 结束循环;
# 其他内容输出“无效选项,请重新输入。”。
# 4. 在文件最后调用 main(),启动完整程序。
# 最终验收测试:
# 1. 输入 1确认显示两个初始 Agent
# 2. 输入 2新增“搜索助手”再次查看时共有三条记录
# 3. 再次新增“搜索助手”,确认重复名称被拒绝;
# 4. 输入 3把“聊天助手”从停用修改为启用
# 5. 输入 5确认“代码助手”显示两个工具
# 6. 输入 4删除“聊天助手”确认列表中不再显示它
# 7. 使用不存在的名称进行查询、修改或删除,确认程序不崩溃;
# 8. 输入 9确认显示无效选项后菜单继续运行
# 9. 输入 0确认程序正常退出。
# 完成后进行代码自查:
# 1. 是否使用列表保存多个 Agent
# 2. 每个 Agent 是否使用字典表示;
# 3. enabled 是否使用真正的布尔值;
# 4. find_agent_by_name() 是否返回字典或 None
# 5. 查找失败后是否提前 return
# 6. 是否使用函数拆分不同功能;
# 7. 菜单循环是否能够正常退出;
# 8. 重复名称是否不会被添加;
# 9. 工具文本是否完成拆分、清理和去重;
# 10. 九组验收测试是否全部通过。