Lab 15Part 6 Pythonic 与现代实践AI Level 2
团队项目开发
本周没有独立题目——整节课用于团队项目开发。但有四个必须完成的里程碑,助教会逐组检查。
截止:小作业 5 · 12 月 29 日 周二 23:59
本页目录
本次目标
- 完成团队项目的核心功能
- 建立可运行的测试套件
- 用 L15 的方法与 AI 协作,并留下证据
- 为下周的 Demo 做准备
本节课怎么用
整整两学时都是你们的开发时间。助教全程在场,随时可以问。
但不是自由活动——下面四个里程碑要在本节课结束前给助教看。
里程碑一:核心功能可运行(必须)
至少完成:
-
Array.__init__能从嵌套列表构造,并校验形状规整 -
shape/ndim/size三个属性 -
__repr__能看出内容和形状 -
__getitem__至少支持a[i]和a[i, j] - 四则运算至少完成
__add__和__mul__(含 Array 与标量两种情况)
给助教演示一遍,能跑通下面这段:
a = Array([[1, 2, 3], [4, 5, 6]])
print(a.shape, a.ndim, a.size)
print(a)
print(a[1, 2])
print(a + a)
print(a * 2)
里程碑二:测试跑得起来(必须)
- 有一个
test_array.py,python3 -m pytest能跑 - 至少 15 个测试用例
- 至少覆盖:正常运算、形状不匹配抛异常、空数组、单元素数组
- 至少有一个与真 NumPy 对拍的测试
对拍长这样:
import numpy as np
from myarray import Array
def test_add_matches_numpy():
data_a = [[1, 2, 3], [4, 5, 6]]
data_b = [[7, 8, 9], [10, 11, 12]]
mine = Array(data_a) + Array(data_b)
theirs = np.array(data_a) + np.array(data_b)
assert mine.tolist() == theirs.tolist()
里程碑三:AI 协作记录(必须)
按 L15 的方法,至少完整走一遍下面这个流程,并把过程记录下来:
- 你先写接口规格——签名 + 文档字符串 + 三个例子(含边界)
- 你先列边界情况——不看 AI 的输出,自己列至少 6 条
- 把规格交给 AI,拿到实现
- 用你的边界情况测它
- 记录:它漏了哪几条?
提交一份不超过一页的记录,包含:你的规格、你的边界清单、AI 的实现、测试结果、以及它漏掉的部分。
里程碑四:分工与一致性检查(必须)
- README 开头有一段项目约定:内部表示、命名风格、错误处理方式
- 有一份分工说明:谁写了哪些部分
- 互相 review 一次:各自挑对方写的一段代码,问”这一行为什么这么写”
在中期检查里回答:互相 review 时,有没有出现答不上来的情况? 如实回答,这一问不扣分。
本周的现实建议
先让它跑起来,再让它好看
核心功能没通就去做广播、布尔索引这些加分项,是最常见的翻车方式。里程碑一优先。
内部表示定了就别改
如果你们现在还在为”嵌套列表还是扁平列表”纠结,今天必须定下来。到下周再改就来不及了。
拿不准就选扁平列表 + 形状元组——它对 reshape 和 transpose 友好得多,而这两个是必做项。
复杂度自己盯
L15 说过,AI 不会主动告诉你它给的 dot 是 O(n³)。你自己测一下:100×100 要多久?200×200 是不是 8 倍?
这个测量结果本身就可以写进 Demo。
两个人都要碰全部代码
Demo 时会分别问两个人关于整个项目的问题。如果你完全没看过队友那一半,下周会很难受。
建议今天花二十分钟互相讲一遍自己那部分。
中期检查提交(本周日 23:59)
打包提交:
- 当前的全部代码
pytest的运行输出截图或文本- 里程碑三的 AI 协作记录(一页)
- README(含项目约定与分工说明)
- 一句话说明:下周 Demo 你们打算展示什么?
下周 Demo 预告
- 每组 8 分钟:5 分钟演示 + 3 分钟提问
- 演示要包含:核心功能、你们做的选做部分、测试运行
- 提问两个人都会被问到,问题涉及整个项目
- 准备好回答:「你们的内部表示为什么这么选?」