如何处理 Python 入门难以进步的现象?

看视频看呀看呀看, 看完了,基础的都懂了 然后就想写点东西 可是无从下手呀,我以为基础不扎实,又去看视频 好了 视频看完了 想网上找点习题来做,结果简单的习题做不出来,又怀疑基础没学好呀 又看视频和网上的文章 如此的循环着 学习有一个月了 我困惑的是,很难把知识点结合起来写个简单的东西 比如说目录遍历都写不出来 我知道站在岸上学不会游泳 你们可能会叫我多练 , 可是我想知道怎么去练 如何练 不能没有目的的去练, …
关注者
8725
被浏览
464605

112 个回答

今天本来以为在评论里互相探讨问题,没想到火药味这么大,后来看到答案才知道自己被喷了.作者在答案里喷完不爽又来评论里喷,也不知道为啥这么大的火气.

说明以下几点:
1. 写几个脚本,分享一下star的python代码,就叫装X,也挺无语了.
2. 刚写答案的时候题主还没有补充内容,看前半段的时候题主没有说是0基础,所以当时也没考虑题主0基础的情况.
3. 也不知道怎么看出我不理解函数式编程,面向对象,面向过程的概念了.

=================================
更新2015-03-20 13:50:24

lz可以问问自己为什么要编程?为什么要学python,不就是为用吗!!!
难道lz没有什么idea想要在电脑上实现,光学习脑子里根本记不住.

至于优秀的开源项目的确很有用,它都是好多人总结提炼成的,你可以想一想如果你要实现sqlmap你改怎么做,不是要你敲一遍,是让你理解它的思维.而且它的代码格式和习惯都是应当值得学习的.

比如我以前这么写:
if value > 100:
    value = 100
if value < 0:
    value =0
看到别人这么写:
max(min(value, 100), 0)

再比如我原来这么写:

if value:
    a = 1
else:
    a = 2

后来我看到原来可以这么写:

a = 1 if value else 2

我也是个大菜鸟,还在学习,我知道的就这么多了...


============================================
原稿

这里有个项目,每天一题,可以试着做一下 Yixiaohan/show-me-the-code · GitHub
外国的一个游戏网站,有中文翻译,具体没做过,不过看起来还挺好玩的 http://www.checkio.org
还有就是 leetcode 里面有 python 的题目可以拿来练手

=============================================
更新 2015年02月06日20:53:46

从简单入手,说实话看书或者看视频有限,许多问题书上根本学不到,介绍一下自己写的帮题主打开一下思路.

项目一:远程关机
有时候有事情去不了实验室,实验室的机子也不能总开着啊,然后就写了个脚本,通过微博关实验室的电脑.

地址: taizilongxu/weibo_robot · GitHub

项目二: douban.fm

有一天逛着 github 发现了这个:
这个是 node.js 做的,自己也不太会,就拿 python 仿照着做了一个,一开始以为挺简单的,后来实际操作中发现还是有困难的,自己还是菜鸟,边学习边做, shell, 线程进程,同步异步,日志,异常,跨平台,重构优化,各种意想不到的 bug,包发布,还得自己抓 豆瓣的 API...不过最后还是可以用了

地址: taizilongxu/douban.fm · GitHub

项目三:网站

自己收藏看的,一个简单网站论坛的 tornado 的源码 littlethunder/ustchacker.com · GitHub
这个是 the5fire 的 django blog the5fire/django_selfblog · GitHub
还有个tango with django 的中文教程 Tango with Django 中文文档




一些比较小的项目,利于初学者能看懂的:

Flowerowl/ici · GitHub 在在终端上查询单词
bfontaine/term2048 · GitHub 终端上的2048
np1/mps-youtube · GitHub 终端上的 youtube
skyline75489/SimpleDNS · GitHub A lightweight yet useful proxy DNS server powered by Python Twisted
binux/qiandao · GitHub 每日定时签到
jiffies/GouYong · GitHub linux 下划词翻译
laiwei/thepast · GitHub 你好旧时光
DTVD/rainbowstream · GitHub Terminal-based Twitter Client

还有一些收藏的用 python 写的开源项目:

binux/pyspider · GitHub 一个可视化的爬虫
scrapy/scrapy · GitHub python知名爬虫
mitsuhiko/flask · GitHub flask, web 微框架
reddit/reddit · GitHub reddit网站源代码
tornadoweb/tornado · GitHub 知乎使用的 web 框架(异步)
kennethreitz/requests · GitHub 给人用的HTTP
whtsky/WeRoBot · GitHub 微信机器人框架
goagent/goagent · GitHub 大名的goagent
sqlmapproject/sqlmap · GitHub 注入神器
ipython/ipython · GitHub ipython
LiuLang/bcloud · GitHub 百度网盘 linux 客户端



最后还有一个 vinta/awesome-python · GitHub ,这个比较全了, awesome 系列.

先写到这,发现其他的再补充
你的学习顺序反了,这当然容易陷入到迷惘之中。

我们都经过了大量的学习,才混到今天。但是我国的学校教育,可能给了很多人误导,让人丧失了自我学习的能力。

其实编程是一个超级实践课程。看书是不够的,做例子是不够的,做习题也是不够的。因为书、例子、习题都不能涵盖你未来需要的所有技能。同时,你的目标不是考试得到一个好的成绩,不是game the system,而是学会一种技能。

所以,你的学习方法错了。

我一向建议所有的初学者,所有的自学者。在学会任何一点基础知识的时候,就开始实践。从实践出发,用实践牵引你学习。

比如,你现在开始学习文件系统和目录了,那好,你可以设计一个小项目给自己。比如,在你自己的硬盘里面遍历,找出所有的mp3/wav文件,算算空间占用,等等。

在做这个小项目的时候,你会发现很多书里面不见得告诉你的知识,你也有可能发现无数种做法。

再比如,你学习到了urllib2的时候,你就应该考虑怎么做一个爬虫项目。

Python是一种非常顺手的,高效率开发的语言。用来做各种各样的好玩的工具都是可以的。看你有没有想法去做了。

学习所有语言都应该这样。

这样学习你就不会说,等到遇到一个现实问题的时候,束手无措了。

从干中学,从学中干。

我不是Python专家,但是我用Python做过一些事情,为啥呢,顺手。

多年前,我一个朋友想到了一个玩法,他找到了一个巨大无比的人名库,几千万名字,他想按照这些人的google搜索数量排序,得到一个人名的热度信息,搞不定找到我。我帮他写了一个python程序,可以每3秒去google搜索一个人名(更频繁会引发google的防spam机制)。但是这样全部搜完要很久吧,拿3000万说要3年,30000000/(60*60*24/3)。然后我再帮他写了个程序把几千万的人名切成几十份,然后他去找朋友的机器来运行,凑了几十台机器,一个月不到就抓完了。一个最简单的分布式爬虫就做好了。

做这个之前,我其实对Python没啥了解的,就是估计Python做这个很顺手,比其他语言简单就用了Python,后来果然是,其实这代码也就10-20行的样子吧。