给python新手的一些建议

关注公众号【算法码上来】,每日算法干货马上就来!

首先很荣幸被邀请给大一新入学的学弟学妹们谈谈编程入门经验,尤其是他们正在学的python语言。我就随便谈谈我大一时是如何编程入门的,以及怎么才能学好python编程,其他语言类似,都是相通的。最后再回答一下大家问的比较多的一些问题。

引言


大多数人应该和我刚上大学时一样,完全没有接触过编程,所以在上python课的时候可能是一脸懵逼,完全不知道代码的原理是什么,为什么写出来就能运行,也不知道如何熟练地写出一段完整的代码。这都很正常,我大学之前也是对计算机一窍不通的,但是高中毕业的那个暑假,刚刚接触电脑、用上互联网的我,用了一个月自学了谭浩强的《C语言程序设计》,从此打开了新世界的大门。因此我下面结合我自身的经历给大家一些编程学习的经验,当然很多都要结合你自身的喜好和习惯,不用完全按我的来。

一个称手的代码编辑器


要想代码写的舒服,首先得用一个称手的代码编辑器,最常用的python IDE是pycharm,如果你刚入门很依赖调试的话,可以使用这款IDE。当然不能过于依赖IDE的调试功能,要练就肉眼调试的本领,这样能极大的提高你的代码能力。所以我熟练了之后换上了sublime代码编辑器,这是一款十分漂亮的编辑器,个人觉得比pycharm好看到不知哪里去了。而具体的安装与python环境配置,去看看我的教程就行了:Sublime Text安装与配置教程

多练>多看


很多人还以为和高中一样,上课听听就完事了,课后也就不花时间去写代码了。其实不然,要想学好python,光课上听是没什么用的,还需要课后不停的找题目练习,只有试了才知道自己可能会踩到什么坑,才能不断总结出许多代码编写的经验。我刚开始也是一个劲看书,觉得语法都看的差不多了,以为自己都懂了,但是真正自己写起来才发现有很多的问题。

课本首先得看熟了,上面的例子都要自己敲过去,还有布置的编程作业都得认真做完。推荐大家一个在线编程网站:Python 基础教程 | 菜鸟教程,上面可以边学边练习,可以一定程度上提高你的学习积极性。

善于使用EOJ


有很多同学学到最后都不知道有EOJ这个东西,这是我们学校的在线刷题网站,现在已经做得十分精美了。如果让你干巴巴的去写书上的代码,可能没多久你也没什么兴趣写了,但是如果让你用python做出来一道道的编程题,那么依旧会获得难以描述的快感,这能极大的提升你的积极性和代码能力。

首先去EOJ注册一个账号,然后去做过的人多的简单题,很多题首先考察的不是代码能力,而是你的算法,下面我还会讲到算法的重要性。做题需要注意输入输出格式,注意题目中的各种坑点,代码不是自然语言,和数学题一样容不得半点差错。

程序=算法+数据结构


光会写几行代码没用,还要学会使用基本的数据结构和算法,这样才能写出高效率高质量的代码。比如python中的列表list、元组tuple、字典dict等等,熟练使用它们将会大大减轻你的工作量。算法也是非常重要的,比如要对若干个数进行排序,如果暴力的话速度会很慢很慢,这时候你就要学会用快速排序算法,就能立即得到结果啦。

学会查阅资料


很多人遇到什么函数不会用了,使用报错了都不知道怎么办,到处问人,其实可以直接去python官网查看文档,里面都有各个函数的用法说明。遇到错误也可以百度错误内容,会有很多人写博客说明解决方法的,实在找不到推荐一个网站:stackoverflow,这是国外的一个问答网站,上面有超多编程相关问题,只要你提问了基本都有人替你解答。

良好的编码风格


很多同学刚开始写的代码风格都很丑,我自己也是,要尽快形成自己的代码风格,python相比c语言好很多,强制了缩进,不然编译都不给你通过,但是还是有很多地方需要你自己注意,比如表达式运算符两边要加空格、变量命名要可以直接看出用途等等。推荐大家去读一读google的python编程规范,写出美观的代码,以后也便于维护。

Q&A


  • Q: python相对于其他语言有哪些优势和区别?

  • A:* 首先python语言最大的优势就是简单,非常适合没有编程基础的人入门,它去除了c语言繁琐的指针类型,而且代码也很容易读懂,与人类语言有点类似。python也支持面向对象,并且不像c++和java那样繁琐,保持了它的简洁性。因为它是开源的,所以有很多很多的第三方库可以调用,很多功能根本不需要你自己动手写,别人都帮你写好封装好了,你直接调用一个函数就解决了。但是python也有缺点,一大缺点就是相比于c++和java这种较为底层的语言,python的运行速度非常慢,当然可以选择使用cython来加速python。并且python的格式要求非常严格,强制代码缩进,两条语句不能写在同一行等等。

  • Q: 老师上课提到“面向对象”和“面向过程”,是什么意思?

  • A:* 简单来说,面向过程就是按照解决问题的顺序,一步步的编写代码、调用函数。而面向对象就是将你要处理的事物分解为一个个对象(也就是类),每个对象有很多属性,编写代码时只要生成这些类,并且调用它们的类方法就好了。面向对象的一大好处就是可维护性好,比如如果你要对两个相同的对象进行操作,如果用面向过程,那你就要写两段相同的代码,如果改了一段,还得同时修改另一段;而面向对象就很简单了,因为你的两个对象都封装在了一个类里,所以只要改一下类就好啦。

  • Q: 拿到一个问题应该如何思考?如何解决?步骤是什么?

  • A:* 拿到一个问题(比如编程题),不要直接下手写代码,先想想该用什么方法解决?方法的时间复杂度和空间复杂度能否承受?要用到哪些函数?总体框架应该写成什么样子?然后再一个个模块编写,不要写一步想一步。

  • Q: 什么是递归思维?有什么好处?

  • A:* 递归思想也就是递归算法是经常用到的一种算法,可以将规模很大的问题化解为一个个的小问题,便于求解也增加了可读性。举个例子吧,求解阶乘,常规方法是从$f(1)$开始逐项计算,而用递归思想就是要计算$f(n)$,就先计算出$f(n - 1)$然后乘以$n$,而$f(n - 1)$继续递归算下去就行了。

  • Q: 对于萌新,基础薄弱,学长有什么好的方法?推荐一下有用的参考资料

  • A:* 基础薄弱那就先把书上的语法看懂了,边看边敲了自己试一试怎么用,不要光看不写。资料的话看再多不如自己敲来的记忆深刻,推荐《python简明教程》吧,最方便的还是不会的用法直接百度或者谷歌,看博客讲解。

  • Q: 如何避免语法符号规范的错误?

  • A:* 语法错误很正常,我也经常遇到,特别是没怎么用过的函数,这个只能靠查文档,然后用多了自然就记得怎么用了。规范之类的上面说过了,去看google的python编码规范,养成一个好的编码习惯,既是为了别人能看懂你的代码,也是为了你自己今后还能看懂你自己的代码。

  • Q: 如何判断什么时候该用什么函数?

  • A:* 这个就根据你要实现的功能啊,比如你要切分一个句子变成若干个单词,那么自然而然想到要用string.split()函数。当然刚开始你可能根本就不知道有哪些函数可以给你用,那么你就需要百度“python切分一个句子变成若干个单词”,然后就会告诉你要用什么方法了,多查多记以后就会用了。

  • Q: OJ系统是什么?我们如何利用它?

  • A:* OJ全称是Online Judge,是一个在线评测系统,上面有很多很多编程题,你可以写代码实现它,然后提交给OJ运行,它会告诉你你的代码是否正确。大家可以利用我们学校自己的EOJ来进行编程训练,先从简单的题开始做起,记住,不要一遇到不会做的题就去百度找题解,一定要自己思考,自己想出了方法收获才是最大的,切记。


   转载规则


《给python新手的一些建议》 韦阳 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
Linear-Time Constituency Parsing with RNNs and Dynamic Programming Linear-Time Constituency Parsing with RNNs and Dynamic Programming
关注公众号【算法码上来】,每日算法干货马上就来! 好像已经很久没有看论文了呢,开学了一堆事情,以后还是要抽空阅读论文,保持一定的阅读量,并且不能光看最新的论文,还得去前人传统的方法中去寻找有没有能应用于深度学习的东西,说不定就发AC
2018-10-15
下一篇 
成分句法分析综述 成分句法分析综述
一直以来想对保研到现在一年多看过的论文进行一个总结,正好赶上下周二要讲组会,所以将自己看过的成分句法分析相关的论文梳理一下,写一个粗略的综述。可能有很多细节还不是很懂,理解有误,还请大家指正。
2018-09-26
  目录