Files

120 lines
5.5 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.
# 第 1-13 课课堂练习Agent 函数工具箱进阶
#
# 完成要求:
# 1. 按照每道题给出的函数名、参数、测试数据和预期结果完成代码。
# 2. 需要继续使用的结果必须通过 return 返回,再由调用者使用 print() 输出。
# 3. 使用有意义的英文蛇形函数名和变量名。
# 4. 函数体使用四个空格缩进。
# 5. 不要删除题目注释。
# 6. 完成后运行本文件,并逐项核对预期结果。
# 练习一:定义一个返回多个结果的函数。
# 1. 定义 get_model_summary(models) 函数,参数 models 接收模型名称列表。
# 2. 函数使用 len(models) 得到模型数量。
# 3. 使用 models[0] 得到第一个模型名称。
# 4. 使用一个 return 同时返回“模型数量”和“第一个模型名称”。
# 5. 使用 ["gpt-5", "o3", "claude"] 调用函数,并用两个变量接收返回值。
# 6. 分别输出两个变量预期输出3 和 gpt-5。
# 练习二:观察多个返回值的真实数据类型。
# 1. 再次调用练习一的 get_model_summary()。
# 2. 这次只使用一个变量 summary 接收全部返回值。
# 3. 输出 summary 和 type(summary)。
# 4. 预期 summary 为 (3, "gpt-5"),类型为 tuple。
# 练习三:使用提前返回处理无效数据。
# 1. 定义 calculate_average(scores) 函数scores 接收分数列表。
# 2. 如果 scores 是空列表,立即使用 return 返回 0。
# 3. 如果列表非空,返回 sum(scores) / len(scores)。
# sum() 用于计算列表中所有数字的总和。
# 4. 第一次使用 [80, 90, 100] 调用,保存并输出结果,预期为 90.0。
# 5. 第二次使用空列表 [] 调用,保存并输出结果,预期为 0。
# 练习四:使用 *args 接收任意数量的工具。
# 1. 定义 count_agent_tools(*tools) 函数。
# 2. 函数内部使用 len(tools) 统计工具数量,并使用 return 返回。
# 3. 调用 count_agent_tools("搜索", "终端", "计算器"),保存并输出结果。
# 4. 再调用一次 count_agent_tools(),本次不传任何工具。
# 5. 两次预期输出分别为 3 和 0。
# 可参考 advanced_functions.py 中 count_tools(*tools) 的写法。
# 练习五:确认 *args 在函数内部是元组。
# 1. 定义 collect_models(*models) 函数。
# 2. 函数直接使用 return 返回 models。
# 3. 传入 "gpt-5"、"o3" 和 "claude" 调用函数,把返回值保存到 collected_models。
# 4. 输出 collected_models 和它的类型。
# 5. 预期输出内容为 ("gpt-5", "o3", "claude"),类型为 tuple。
# 练习六:组合普通参数和 *args。
# 1. 定义 build_agent_tool_message(agent_name, *tools) 函数。
# 2. 使用 return 返回:"{agent_name} 拥有 {len(tools)} 个工具"。
# 3. 使用 "代码助手"、"搜索"、"终端" 调用函数,保存并输出返回值。
# 4. 预期输出:代码助手 拥有 2 个工具。
# 练习七:使用 **kwargs 收集关键字参数。
# 1. 定义 build_runtime_config(**settings) 函数。
# 2. 函数直接使用 return 返回 settings。
# 3. 使用以下三个关键字参数调用函数:
# model="gpt-5"、timeout=30、enabled=True。
# 4. 把返回值保存到 runtime_config并输出它和它的类型。
# 5. 预期字典包含三个对应键值,类型为 dict。
# 可参考 advanced_functions.py 中 build_agent_config(**config) 的写法。
# 练习八:组合普通参数和 **kwargs。
# 1. 定义 create_agent(name, **settings) 函数。
# 2. 函数返回一个字典,结构必须是:
# {"name": name, "settings": settings}
# 3. 使用 name="代码助手"、model="gpt-5"、enabled=True 调用函数。
# 4. 保存并输出返回值。
# 5. 预期结果中的 name 为“代码助手”settings 是包含 model 和 enabled 的字典。
# 练习九:使用 * 解包列表后调用函数。
# 1. 定义 multiply_three_numbers(first, second, third) 函数。
# 2. 函数使用 return 返回三个数字的乘积。
# 3. 创建列表 numbers = [2, 3, 4]。
# 4. 使用 multiply_three_numbers(*numbers) 调用函数,而不是手动写三个参数。
# 5. 保存并输出返回值预期输出24。
# 练习十:使用 ** 解包字典后调用函数。
# 1. 定义 build_model_message(name, model) 函数。
# 2. 函数使用 return 返回:"{name} 使用模型 {model}"。
# 3. 创建字典:
# agent_data = {"name": "搜索助手", "model": "o3"}
# 4. 使用 build_model_message(**agent_data) 调用函数。
# 5. 保存并输出返回值,预期输出:搜索助手 使用模型 o3。
# 预期核心结果:
# 练习一分别得到 3 和 gpt-5
# 练习二确认多个返回值组成 tuple
# 非空分数列表的平均分为 90.0,空列表结果为 0
# count_agent_tools() 分别返回 3 和 0
# collect_models() 返回元组;
# Agent 工具消息显示 2 个工具;
# **kwargs 收集到的数据类型为 dict
# create_agent() 返回包含 name 和 settings 的嵌套字典;
# 三个数字的乘积为 24
# 字典解包后生成“搜索助手 使用模型 o3”。
# 完成后进行自查:
# 1. 多个返回值是否使用多个变量正确接收;
# 2. 只用一个变量接收多个返回值时,是否得到元组;
# 3. 空列表是否通过提前返回避免了除以零;
# 4. *args 在函数内部是否被当作元组使用;
# 5. **kwargs 在函数内部是否被当作字典使用;
# 6. 普通参数是否写在 *args 或 **kwargs 前面;
# 7. 调用时的 * 是否正确解包列表;
# 8. 调用时的 ** 是否正确解包字典;
# 9. 需要继续使用的计算结果是否通过 return 返回。