MIT-LEC6.0001 PS5 学习笔记
一、概述
编号6.0001的课程是MIT的一门本科基础教程《Introduction to Computer Science and Programming in Python》,在OCW-MIT上可以找到。课程主要介绍了python的一些基础内容,比如变量类型、循环、注释类型、类,面向对象编程的思想。教程面对的是从未接触过编程的新手,难度不大,但作为一个已经”学习“过一段时间python的人来说,依然有一些学习的价值,这些小技巧是国内的一些教程(廖雪峰的网站,github上星标贼高的100天python教程)从未提到的,比如类的继承里类成员的初始化。
OCW-MIT上提供的下载包括slides、code、documents等,十分详细。每个课程都会被分解多个小问题进行求解,而且code中的主框架已经搭建好了,个人需要做的只是求解部分,笔者觉得有利于学习的人养成良好的代码习惯,这是国内教学所不足的。笔者只是做了PS5的部分,这个部分的实现被分成了11个小问题,一步一步前进。程序实现了一个RSS图形界面,能够抓取google和yahoo的新闻,但由于墙的存在,程序运行后是一个空的界面。
二、过程
2.1 problem1 NewsStory
类成员变量的初始化,通过methods访问成员变量。
2.2 problem2~4 PhraseTrigger
类的继承,类的成员函数重载,字符串数据的处理,基本的数据结构:list,list of lists
Trigger类的子类PhraseTrigger的子类TitleTrigger和DescriptionTrigger
2.3 problem5~6 TimeTrigger
datatime类的使用,时间的格式转换,datatime类对象的比较。
2.4 problem7~9 CompositeTrigger
复合触发器,也即在触发器的基础上进一步优化,使得触发器可以在多种条件下触发。
以类对象作为成员变量。
2.5 problem10~11 Filtering
1.筛选出符合条件的新闻,并返回新闻。2.返回按照配置文件设定的类型的数据。难点在于数据的处理,使用的处理算法并不难。
三、总结
在学习的过程中熟悉了类的初始化、继承、函数重载,字符串处理方法,并进一步加深了自己对面向对象的理解。暴露出的不足是浮躁的心态,急于求成,在学习时不求甚解,盲目追求速度。虽然已经能够按照教程搭建网站并建立数据库存储数据,但自己上手写程序还是有些吃力。
后续可以进一步学习该课程的程序文档,比如获取数据的process函数。
四、一些编程的小技巧
- Calling a superclass constructor from subclass
- Directly Accessing Instance Variables : use getter method
- Pitfall of storing custom objects in data structures: change the structure of data
五、遇到的bug
1.take no arguments:
类的初始化出现问题:init: 下划线为两个,同时注意检查拼写。
2.can’t compare offset-navie and offset-aware datetimes:
时间格式的不同,转化格式后即可。(在python3.8下无法比较,网上有低版本的python可以比较)
3.空格和缩进,python最让人烦的就是这一点吧,通过缩进表示作用域这个真的是有时让人完全找不到BUG在哪。