三轮交付一个小功能
做一个待办筛选函数:第一轮按完成状态,第二轮按标题搜索,第三轮处理空关键词。它返回原顺序的匹配项,不修改原列表。练习只用虚构任务,不需要数据库或网页。
可以在 MiniMax Agent或自己已有的 MiniMax 编程入口提交任务。语言编程与海螺视频是不同功能,本课只处理文本代码。MiniMax 编程工具入口。
固定这三条样例
[
{"id":1,"title":"Read API notes","done":false},
{"id":2,"title":"Write tests","done":true},
{"id":3,"title":"Read Python book","done":false}
]
保存数据与每一轮代码版本。你需要比较的是修改前后的行为,不是最后一轮生成了多少代码。
第一轮:完成状态筛选
请写 select_tasks(items, done=None)。done 为 None 返回全部,True只返回已完成,False只返回未完成;其他值抛ValueError。
输入记录符合 id、title、done 结构。保持原始顺序,不修改输入,不使用第三方依赖。
用三条给定样例验证返回ID分别为[1,2,3]、[2]、[1,3]。
先运行这一轮再继续。注意 if done: 容易把 False 与 None 混在一起,应明确区分“没有过滤条件”和“过滤未完成”。
第二轮:组合关键词
在已有函数末尾增加 keyword="" 参数,兼容原调用。标题搜索忽略英文字母大小写;状态与关键词同时满足才返回。
keyword 必须为字符串,去除首尾空白。空关键词表示不限制标题。
保留原来的顺序和全部状态测试,新增 keyword="read" -> [1,3],done=True且keyword="read" -> []。
这一步不要新增排序。搜索与排序是两个需求,擅自按标题排序会改变原来的行为。
第三轮:用反例修空搜索
如果助手使用了不合适的判断,空关键词可能返回空列表。发送:
select_tasks(items, keyword=" ") 应与不填写关键词相同,返回[1,2,3]。请先strip,再把空字符串视为无搜索限制。保留done=False的行为,不要把False当成未传参数。运行全部旧样例和这条反例。
下面是三轮合并后的参考答案,保存为 tasks.py 运行:
def select_tasks(items, done=None, keyword=""):
if done is not None and type(done) is not bool:
raise ValueError("done 必须为布尔值或 None")
if not isinstance(keyword, str):
raise ValueError("keyword 必须为字符串")
needle = keyword.strip().casefold()
return [
dict(item) for item in items
if (done is None or item["done"] is done)
and (not needle or needle in item["title"].casefold())
]
items = [
{"id": 1, "title": "Read API notes", "done": False},
{"id": 2, "title": "Write tests", "done": True},
{"id": 3, "title": "Read Python book", "done": False},
]
def ids(**options):
return [x["id"] for x in select_tasks(items, **options)]
assert ids() == [1, 2, 3]
assert ids(done=True) == [2]
assert ids(done=False) == [1, 3]
assert ids(keyword="READ") == [1, 3]
assert ids(done=True, keyword="read") == []
assert ids(keyword=" ") == [1, 2, 3]
result = select_tasks(items)
result[0]["title"] = "Changed copy"
assert items[0]["title"] == "Read API notes"
print("状态、搜索、组合条件与输入保留通过")
此处复制一层字典足以保护样例中的字符串与布尔字段;如果记录含嵌套可变对象,浅拷贝并不隔离内部结构,需要另行定义需求。
怎样评价这次多轮协作
看每轮有没有保留旧测试、是否只增加所需参数、是否把失败原因解释到具体分支。不要因为助手说“已全面优化”就跳过运行。