# 第 1-11 课课堂练习:Agent 工具权限管理器 # # 完成要求: # 1. 根据注释完成集合的创建、成员判断、添加、删除、遍历和集合运算。 # 2. 使用有意义的英文蛇形变量名。 # 3. 不要依赖集合的显示顺序。 # 4. 删除可能不存在的元素时使用 discard(),或先使用 in 判断。 # 5. 不要删除题目注释。 # 6. 完成后运行本文件并核对预期结果。 # 练习一:创建集合 agent_tools,包含以下工具: # "搜索"、"计算"、"写作"、"搜索"。 # 输出集合和元素数量,观察重复的“搜索”是否只保留一份。 # 练习二:创建空集合 disabled_tools。 # 输出它的值和类型,确认类型是 set,而不是 dict。 # 练习三:完成成员判断: # 1. 判断 agent_tools 中是否存在“搜索”,保存到 can_search; # 2. 判断 agent_tools 中是否不存在“图片生成”,保存到 cannot_generate_image; # 3. 输出两个判断结果。 # 练习四:使用 add() 向 agent_tools 添加“代码执行”。 # 再次使用 add() 添加已经存在的“搜索”。 # 输出添加后的集合和元素数量,确认没有产生重复元素。 # 练习五:使用 update() 一次添加“图片生成”和“网页浏览”。 # 传给 update() 的数据可以使用列表。 # 输出更新后的集合。 # 练习六:完成安全删除: # 1. 使用 remove() 删除确定存在的“网页浏览”; # 2. 使用 discard() 删除不存在的“语音识别”; # 3. 输出删除后的集合,确认程序没有报错。 # 练习七:使用 for 遍历 agent_tools。 # 为了让输出顺序稳定,请遍历 sorted(agent_tools)。 # 每行按照“可用工具:搜索”的格式输出。 # 练习八:创建两个集合: # code_agent_tools = {"搜索", "计算", "代码执行"} # writer_agent_tools = {"搜索", "写作", "图片生成"} # 计算并输出: # 1. 交集 common_tools; # 2. 并集 all_tools; # 3. 代码助手独有的差集 code_only_tools; # 4. 对称差集 different_tools。 # 练习九:创建以下两个集合: # required_tools = {"搜索", "计算"} # available_tools = {"搜索", "计算", "写作"} # 使用 <= 判断 required_tools 是否是 available_tools 的子集, # 将结果保存到 has_required_tools 并输出。 # 练习十:为模型使用记录去重: # model_history = ["gpt-5", "o3", "gpt-5", "o3", "gpt-5-mini"] # 将列表转换成集合 unique_models 并输出; # 再把集合转换成列表 unique_model_list 并输出。 # 注意:转换后的顺序可能与原列表不同。 # 练习十一:创建集合 current_permissions: # {"读取配置", "修改配置", "执行任务"} # 再创建集合 revoked_permissions: # {"修改配置", "删除配置"} # 使用差集得到 remaining_permissions, # 表示撤销相关权限后仍然保留的权限,并输出结果。 # 预期核心结果: # agent_tools 中重复的“搜索”只保留一份; # disabled_tools 的类型是 set; # can_search = True; # cannot_generate_image = True; # 重复执行 add("搜索") 不会增加元素数量; # discard() 删除不存在的元素时不会报错; # common_tools = {"搜索"}; # all_tools 包含两组 Agent 的全部工具; # code_only_tools = {"计算", "代码执行"}; # different_tools 不包含共同拥有的“搜索”; # has_required_tools = True; # unique_models 只有三个元素; # remaining_permissions = {"读取配置", "执行任务"}。 # 完成后进行自查: # 1. 空集合是否使用 set() 创建; # 2. 是否理解集合会自动去除重复元素; # 3. add() 和 update() 是否按要求分别使用; # 4. 删除不存在的元素时是否避免了 KeyError; # 5. 遍历时是否没有依赖集合自身的顺序; # 6. 是否能区分交集、并集、差集和对称差集; # 7. 是否理解差集运算的左右方向; # 8. 是否能使用子集判断检查权限; # 9. 是否理解集合去重可能打乱原列表顺序。