CS1602计算导论
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 / size3一维二维各测
__repr__ / __eq__4输出可读,== 语义正确
索引 a[i] / a[i,j] / 切片8含负数下标、越界抛异常
四则运算(Array 与标量)8形状不匹配要抛异常
归约 sum/mean/max/min(含 axis)6axis=None/0/1 都要对
reshape / transpose4元素数不匹配要抛异常
zeros/ones/arange/dot2

测试(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)
布尔索引+5a[a > 5]
三维及以上+5至少 reshape、索引、运算支持
性能优化+5换表示或算法,必须给出实测对比
漂亮打印+5对齐输出,像 NumPy 那样
其他+5自己想的,在报告里说明

总分封顶 100%。


最终提交(本周日 23:59)

打包成一个压缩文件,包含:

  1. 全部代码(实现 + 测试)
  2. README.md(见上面文档要求)
  3. 报告.md,不超过两页,回答:
    • 你们的内部表示是什么?为什么这么选?考虑过但放弃了什么?
    • 最难的部分是哪个?怎么解决的?
    • 测试策略是什么?对拍发现过哪些 bug?
    • 分工说明:谁做了什么,各占多少
    • 如果再做一次,你们会改什么?
  4. pytest 的完整输出

课程收尾

期末考试

  • 时间地点见教务通知
  • 闭卷,占总成绩 50%
  • 范围与题型见 L16 第三节
  • 重点:高频陷阱清单上的每一条

复习建议

  1. 把 L16 的高频陷阱清单过一遍,每条都能说出为什么
  2. 按五条线索复习(引用模型、代价意识、分而治之、验证、外部世界是脏的),不要按讲次
  3. 手写代码——考场没有补全,没有 AI
  4. 把讲义里的可运行代码块改一改再跑

答疑

  • 课程群里随时问
  • 考前一周有一次集中答疑,时间另行通知

最后

这门课到此结束。

十六周前,你们中的很多人没写过一行代码。现在你们做完了一个几百行、有测试、有文档、两个人协作的项目。

这个跨度比你们现在意识到的要大。

祝考试顺利。也希望这门课之后,你们写的代码能一直有人愿意读。