iCal & Python 学习

学习了 Python 学着做了一个 iCal 的日历,这算是我第个真真正正的自己写出来 (不是跟着教程来敲),并且有实际可用功能的程序。顺便回顾一下学习 Python 的经历和感想

为什么学 Python?

学习一定要有动力。这个动力可能只是一个想法,但是那将让你的学习的过程中有目标,进而朝着目标 有计划地 靠拢。而对我来说,我一开始的动机来自于 可能吧的一篇文章 中的一句话

花 1 天时间,学会如何写一个简单包含 replacements 函数的 Python 脚本。
把要替换的元素,都写进这个 Python 脚本里。

Jason Ng 可能吧 https://kenengba.com/post/3507.html 可能吧公众号的文章是如何排版的?

当时打算开一个微信公众号,所以想弄一个可以自动排版的脚本,于是开始学习 Python,但是大概是我没有编程基础的原因,我做不到花一天时间就把脚本写出来的程度,反而决心要认认真真的学习这一门语言了。其实因为前端的 CSS 什么的功夫还不到家,直到现在我也没有写出这样一个脚本。(立个 flag 接下来要学前端三大户了)

  1. 只在 " 学习区 " 练习;
  2. 把要训练的内容分成有针对性的小块,对每一个块进行 重复练习
  3. 整个 练习过程中,随时 能获得 有效 的反馈;
  4. 练习时注意力必须高度集中。
同人于野 万万没想到

先引用一个关于 *『刻意学习』* 的总结,下面对比一下 Python 和 C++ 学习上的差别:

  1. Python 语法相对 C++ 简单得多,而且报错上也友好 (至少对我是这么觉得的) 这样更符合『学习区』的定义,而不是一下子就进入了所谓的『恐慌区』
  2. Pipy 有大量的第三方库,让初学者可以更轻松的开展例如爬虫,图形界面编程,数据分析无所不有。相比于学了那么久的 C还没有逃出那个所谓的『黑框框』这种反馈可以说是非常的 及时有效 了。Python 语法中的那些高级封装比如切片操作比起 C中的字符串操作真的爽多了

当然 C 语言在后续的课程还有 " 底层 " 的应用是 Python 很难做到的, Python 本身也是 C 语言实现的呢。Python 和 C 语言各有各擅长的区域啦。比如要处理字符串,当然是 Python 更好写啦。
!重点:学 Python 并不影响学 C 甚至说会有帮助 (下面会说)
可能有人会担心语法会弄混,的确语法偶尔会弄混,但当你按下编译键时,很快你就能得到及时反馈并改正语法。

我学 Python 的过程和收获

前面说道我本来是想写一个包含 replacements 函数的脚本,但我发现直接来不行啊。各种看不懂,所以还是系统一点的学吧。

  • 我先是在 瘳雪峰的 Pyhon 教程 上学的。教程写得由浅入深,学到了不少,当然很多看不懂。不懂反复看多几次,如果实在不懂,那要么是放弃掉了,要么是先学了些前置知识再看。
  • 然后是看了一本书 A byte of Python 英文版 OR
    A byte of Python 中文版 书上有很多示例程序,对于语法有更加清晰的理解,书上还有一个关于如何解决实际问题的例子,这让我认识到会 只会 语法没有意义。
  • 然后看了一部分大学 Mooc 上 Python 语言程序设计 其中第七周的计算生态获益匪浅,而这种程序设计的通法不仅对 Python 对 C++ 甚至其他的编程语言都是相通的。
  • 接着又学习了 Python 网络爬虫与信息提取 学习了使用库,学习使用一个第三方库。更重要的是深刻的理解『自顶向下的程序设计方法』中各个函数的功能和参数设计。还有函数之间的相互联系。真的百闻不如一见,而百见也不及亲自尝试的理解深刻。过程中还读了一本 图解 HTTP, 对 Http 协议各种 method 错误码和 TCP/IP 有个大概了解。

iCal

感觉之前的 第一个爬虫 贴的到处是代码的形式有待改进,大部分都写到了代码的注释里。传送门
因为功力不足所以只能通过手动获取 HTML 文本,再用 BeautifulSoup 库配合 re(正则表达式)爬取课表,再用 iCalendar 库 生成 ics 文件。

手动获取 HTML

还是那句话,功力不足,HTML 要在开发者工具中获取,按下「shift + ctrl + C」鼠标选中对应的元素然后 copy 保存到一个文本文件中
获取 HTML

收获

尽管程序实现很不尽如人意,但至少对我个人而言不用每学期手动输课表到 Google Calendar 了。并且过程中也锻炼了自己的编码能力。不得不再提一下函数的实现和参数的设计,真的动下手写一个,熟悉了一般套路感觉非常好。