120 lines
5.5 KiB
Python
120 lines
5.5 KiB
Python
# 第 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 返回。
|