6.00.1x 课程小结

. 3 min read

6.00.1x是MIT在EdX开设的一门计算机科学入门课,全称Introduction to Computer Science and Programming Using Python。之前看过一些MIT的OCW课程,但并没有认真地跟一门MOOC。MOOC最大的好处是有截止日期,对于拖延症患者来说“Deadline就是第一生产力”;同时习题能够在线检测正确性,得到实时反馈。

至于6.00.1x这门课,视频讲授部分中规中矩,没有特别出彩的地方,MIT的课堂录像要比这有趣的多。内容上还是很丰富的,简单介绍Python的句法后,Binary Search,Recursion等内容就开始出现了,之后还涉及到调试、面向对象等内容,还有Binary Tree等数据结构的内容,生成器和Lambda也有涉及。课间习题有大量的阅读内容和扩展,Problem Set的题目难度刚好,将问题分成了若干小问题来解决,也有效降低了难度。Final Exam的难度就显得过于简单了,可能是为了更多人能通过(拿到付费证书)吧。

晒个学习进度先:

下面是对一些细节的总结:
出于保密原则,不涉及具体章节和题目。

  • Python中的大小比较,需要注意的是字符串永远比数字大,List、Tuple也能进行大小比较,至于其他不同类型的对象,虽然能比较但几乎没有意义(与内存地址有关)。
  • 对于list, str等,find和index方法的区别在于后者在查找失败时会raise ValueError,其他一些方法也有类似的,用到时注意就是了(其实我是忘了)。
  • Python中没有类似C语言的static关键字,通过变量名前包含“__”(两个下划线)来表示静态变量。递归函数总想用静态变量,这么做倒也可以,然而如果可以不用我觉得还是不要用好了。
  • tuple、list可以转换,然而有更好的办法,来避免转来转去(通常为了编辑tuple)。比如可以用“+”连接tuple。再比如定义一个tuple做参数的函数,返回一个新的tuple,该结果以参数中的偶数号元素组成,直接return aTup[::2],要比在循环中对list不停地append漂亮的多。(对于str同样适用)
  • -3/2 = -2,总是习惯性的写成-1。(Python 3 以后好像结果又不一样)
  • 白盒测试(Glass Box)黑盒测试(Black Box),白盒测试写出正确的test suite 并不容易。
  • Assertion 和 Exception 那部分的内容掌握的很差, Post conditionPre condition,当时迷迷糊糊过去了,用到时再深入理解吧。
  • 计算复杂度特别是best case和worst case的步数不太容易。
  • 生成器在一些问题中很好用。凡是有“yield”关键字的“函数”都是一个生成器对象。
  • Lambda匿名函数

TOC