Lab 16Part 6 Pythonic 与现代实践AI Level 0
团队项目提交(第 16 周)
第 16 周没有实验课,团队项目也不答辩——只提交。这一页是最终提交清单和完整的评分细则,从第 14 周开始就可以对着它做。
截止:本周日 23:59 提交最终代码与报告
本页目录
这一周做什么
第 16 周只有理论课,不安排实验课,也不答辩。团队项目按下面的清单打包提交就算完成。
| 时间 | 该做的事 |
|---|---|
| 第 14 周 | 组队、交设计草案,开始写 |
| 第 15 周 | 交进度检查,实现基本跑通 |
| 第 16 周 | 补测试、写报告、对着评分细则自查 |
| 本周日 23:59 | 提交压缩包 |
交之前,自己先跑一遍
别把没跑过的东西交上去。 打开终端,真的跑一遍:
a = Array([[1, 2, 3], [4, 5, 6]])
print(a)
print(a.transpose())
print(a.reshape(3, 2))
print(a + a)
print(a.sum(axis=0))
然后跑一遍测试:
python3 -m pytest -v
测试全绿的那一刻,比报告里任何一句话都有说服力。 把这次的完整输出存下来, 它是提交物之一。
顺便自问一遍
助教批改时会盯着这几处看,你们自己先过一遍,答不上来的地方就是还没做完的地方:
- 内部表示为什么这么选? 另一种方案有什么缺点?
reshape是怎么实现的? 为什么不用改数据?- 形状不匹配时会怎样? 有没有对应的测试?
dot的复杂度是多少? 100×100 要多久?- 测试里最难写的是哪一个? 为什么?
- 哪一部分是 AI 写的? 你怎么验证的?
评分细则
总分 25%(占课程总成绩),按下表折算:
必做功能(40%)
| 项 | 分值 | 检查方式 |
|---|---|---|
| 构造与形状校验 | 5 | 传入不规整的嵌套列表是否抛异常 |
shape / ndim / size | 3 | 一维二维各测 |
__repr__ / __eq__ | 4 | 输出可读,== 语义正确 |
索引 a[i] / a[i,j] / 切片 | 8 | 含负数下标、越界抛异常 |
| 四则运算(Array 与标量) | 8 | 形状不匹配要抛异常 |
归约 sum/mean/max/min(含 axis) | 6 | axis=None/0/1 都要对 |
reshape / transpose | 4 | 元素数不匹配要抛异常 |
zeros/ones/arange/dot | 2 |
测试(15%)
| 项 | 分值 |
|---|---|
| 测试能跑、数量充足(≥25 个) | 5 |
| 覆盖异常路径(形状不匹配、越界等) | 4 |
| 覆盖边界(空数组、单元素、一维) | 3 |
| 与 NumPy 对拍 | 3 |
代码质量与设计(10%)
- 类型提示完整(3)
- 命名与结构清晰、无重复代码(4)
- 错误处理一致(3)
文档(5%)
README 必须包含:
- 项目约定(内部表示、命名、错误处理)
- 安装与运行方式
- 用法示例(至少三个)
- 分工说明
- 已知限制
技术报告(10%)
- 设计决策讲清楚了、有取舍(5)
- 测试策略与踩过的坑写得具体,不是套话(3)
- 分工说明属实,和代码对得上(2)
选做加分(最多 +30%)
| 项 | 加分 | 要求 |
|---|---|---|
| 广播 | +5 | (3,1) 与 (1,4) 相加得 (3,4) |
| 布尔索引 | +5 | a[a > 5] |
| 三维及以上 | +5 | 至少 reshape、索引、运算支持 |
| 性能优化 | +5 | 换表示或算法,必须给出实测对比 |
| 漂亮打印 | +5 | 对齐输出,像 NumPy 那样 |
| 其他 | +5 | 自己想的,在报告里说明 |
总分封顶 100%。
最终提交(本周日 23:59)
打包成一个压缩文件,包含:
- 全部代码(实现 + 测试)
- README.md(见上面文档要求)
- 报告.md,不超过两页,回答:
- 你们的内部表示是什么?为什么这么选?考虑过但放弃了什么?
- 最难的部分是哪个?怎么解决的?
- 测试策略是什么?对拍发现过哪些 bug?
- 分工说明:谁做了什么,各占多少
- 如果再做一次,你们会改什么?
pytest的完整输出
课程收尾
期末考试
- 时间地点见教务通知
- 闭卷,占总成绩 50%
- 范围与题型见 L16 第三节
- 重点:高频陷阱清单上的每一条
复习建议
- 把 L16 的高频陷阱清单过一遍,每条都能说出为什么
- 按五条线索复习(引用模型、代价意识、分而治之、验证、外部世界是脏的),不要按讲次
- 手写代码——考场没有补全,没有 AI
- 把讲义里的可运行代码块改一改再跑
答疑
- 课程群里随时问
- 考前一周有一次集中答疑,时间另行通知
最后
这门课到此结束。
十六周前,你们中的很多人没写过一行代码。现在你们做完了一个几百行、有测试、有文档、两个人协作的项目。
这个跨度比你们现在意识到的要大。
祝考试顺利。也希望这门课之后,你们写的代码能一直有人愿意读。