初衷
笔者本身也不过是一个处于入门阶段的Python初学者,竟想要写一份“Python入门教程”,再加上现在网上的Python入门教程实如过江之鲫,其中大牛之作不在少数,各类网课、在线教学更是层出不穷,似乎是有些不自量力了。不过最终还是鼓起勇气决定写写试试,毕竟我也不是全无优势。刚刚迈过入门之坎的我,大概最能理解编程小白们入门时的茫然与困惑,而这也是一些大牛们的盲点所在,而且我刚刚当完两门编程课助教,正有些“一线教学体会”呢。因此也就写写,一方面帮助师弟师妹们学习,另一方面则是我更大的私心:通过教别人,帮助自己更好的学习。哈哈,这大概是少数“边学边教”的“教程”了吧!使零基础初学读者迅速追上我的水平,并同我一起学习进步,就是本教程的最终目标了。
目标读者
本教程旨在让初学者对编程有所了解,并能够用Python来解决日常生活中的一些问题,提高效率和找点乐子。在此之余,鉴于笔者的科研工作者背景,会顺带着讲些数据处理的东西,乃至随着我的兴趣变化,学习一些新的东西说来分享。所以指望学Python来升职加薪,乃至有什么专业诉求的读者,还是去看大牛们的教程,更加专业。(比如廖雪峰-Python教程)
另外如果你早有其他语言的编程功底,那也别看在我这浪费时间了,面向小白的教程难免啰嗦。
关于本教程的一些说明
上文已经提到,笔者其实也只不过堪堪入门,如题所言,边教边学,所以显然并无能力独立完成一份教程的框架构建。本教程的主要框架和内容取自Al Sweigart的Automate the Boring Stuff with Python一书,此外会结合本人在自学过程中用到的其他材料和经验做些修改。这本书是我看过的对初学者最友好的入门教程,文字内容也很有意思(原版),我在做Python课助教时也一直向同学推荐来着。有中文版,觉得看书方便的同学可以买本支持一下。不过我推荐原版,中文版的翻译在少数地方还是略有差错,无伤大雅,但总归是差了一筹,英文版的词汇也很简单,不难看懂。原版在这里Automate the Boring Stuff with Python,Al Sweigart先生慷慨的将本书的电子版以创作共用许可发布在了网上,使我们可以免费的阅读、分享甚至编辑、修改后再发布。本教程也采用相同的许可。
PS : 按照原版的许可,是可以对其修改、转换后再发布的,但这本书又有中文版在国内卖,我不确定二者有无冲突,如有侵权请与我联系。
啥是编程
往前推个十几年,编程这事对很多人来说好像还带着点神秘色彩,好像是一件牛逼的不得了的事,近几年随着Python等高级语言的流行,编程早已不再那么高深莫测,但影视作品中动不动刷刷刷一屏0和1,还是能把小白唬的一愣一愣的(更吓人的是主角们能从这一堆的0和1中直接看出信息来)。其实编程没那么复杂,本质就是给计算机下达指令,让它们干这个干那个。常用的几句话,翻译成中文就是:
- “把这个干了,再把那个也干了。”
- “如果这个这样,你就这样做,否则,那样做。”
- “那这件事给我干多少多少次。”
- “一直干这个,直到那个什么什么完成。”
嗯,写完这段,突然发现我妈就是个伟大的程序员。
再看段更实际些的Python代码:
passwordFile = open('SecretPasswordFile.txt')# 打开密码文件
secretPassword = passwordFile.read()# 从密码文件中读取密码
print('Enter your password.')# 显示“请输入密码”
typedPassword = input()# 读取用户输入的密码
if typedPassword == secretPassword:# 如果密码一致
print('Access granted') #显示 “验证通过”
if typedPassword == '12345':# 如果密码是12345
print('That password is one that an idiot puts on their luggage.')# 显示“你si bu si sa”
else:# 否则
print('Access denied')# 显示“验证失败”
其实如果你英文四级及格,我不注释你也能明白这段代码是干嘛的吧?不得不说在这方面老外比我们占便宜。
啥是Python
简单点说就是一套语法规则和一个编译器,编译器就是把符合这套语法规则的代码转换成计算机能明白的指令的这么一个东西,类似于你和计算机之间的翻译,每种语言都有自己的编译器。Python这个单词的意思是蟒蛇,但它的创造者取的并不是这个意思,而是他追的英剧的名字,具体参考维基,据说这门语言是为打发时间创造出来的orz。
数学?一点点就好
Al Sweigart说编程中用到的数学就好比解数独。他还非常细致的讲解了9*9数独的解决思路,我就偷个懒,不细说了。总之需要的只是算法逻辑,对数学的要求并不高。当然如果你要解决一些实际的问题,比如构建物理模型,当然会用到数学,但那并不能算是编程的问题。
编程,关键是创造
编程就像搭积木,先搭个架子,再修修补补逐渐美化。那些条条块块都在你手中,能搭出个什么东西,就看你自己啦。纵然中间会出错,甚至会崩溃,但不仍是可以乐在其中的一件事吗?
下载和安装Python
欸嘿嘿,我又来偷懒了,请戳:廖雪峰-安装Python(这样会不会本来就未必有多少的读者也跑走了……不过没关系,你觉得他的教程更适合你的话,那恭喜你找到了更适合自己教程~)
我就强调几个注意事项并做一些补充:
- 要下载Python3,并且是最新版本的,这已经是大势所趋,入门就别再入Python2的门了;
- 看清自己是32位还是64位的系统。
- Windows: 开始→控制面板→系统
- OS X:About This Mac →More Info→ System report→Hardware
- Ubuntu Linux, 打开终端,输入命令 uname -m
i686代表32位,x86_64代表64位。
- 补一下上文链接中没有的ubuntu下的安装方法:
- 打开终端
- 输入 sudo apt-get install python3
- 输入 sudo apt-get install idle3
- 输入 sudo apt-get install python3-pip
其它linux发行版,你既然选择了它,就真的应该知道怎么用它装Python了
运行IDLE
前面说过,编译器是运行你的代码的软件,而IDLE也就是interactive development environment,即交互式开发环境,就是你你输入代码的地方了。Windows下打开开始菜单,输入IDLE;Ubuntu里打开终端,运行idle3; Mac OS X则是在你的应用里找IDLE,即可打开IDLE。
Shell
打开IDLE后你看到的情况应该类似如此:
Python 3.6.1 |Anaconda 4.4.0 (64-bit)| (default, May 11 2017, 13:25:24) [MSC v.1900 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>>
这个就是interactive shell了,直译是交互式壳,感觉怪怪的,一般我们就叫它shell,不再翻译了。它很像Ubuntu的终端和Windows里的命令提示符,在这里你可以输入命令让Python去执行,立刻就会看到结果。
试一下这句
>>> print('Hello world!')
如何寻求帮助
注意!这里要画重点!在我当助教的两门编程语言课程中,部分学生在遇到问题后的表现实在是有些呆,基本报错就懵逼,但平心而论,Python的错误提示信息确实写的相当明白了。看下面这个例子:
>>> '42' + 3
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
'42' + 3
TypeError: Can't convert 'int' object to str implicitly
如果你的英语比较好(这一点外国人真的占便宜),你就可以直接读懂报错的含义。注意 line 1告诉的是你出错的位置,TypeError说的是错误类型,具体是无法将int(整型,也就是整数,integer,数据类型以后会讲)转化为str(字符串,string),也就是说字符串“42”不能和整数3直接相加。
如果你英语不够好,也没关系,将"TypeError: Can't convert 'int' object to str implicitly"这一句,复制粘贴到百度(能上谷歌更好,但要求翻墙和英文),你会看到一堆人问过类似的问题。你要记住,你碰到的问题往往有很多人也遇到过,要善于学习前人经验,互联网不就是干这个的吗?
学会提问
如果搜索引擎还解决不了你的问题,也不要慌,Python有很多用户社区,有许多乐于助人的Pythoner愿意互相帮助。这里我只推荐一个Stack Overlow。它帮助我解决了无数在使用Python中遇到的问题,而且,我还一个问题都没有自己提过,全都是别人遇到过的。不过这又是个英文网站,除了看懂需要一点词汇量外,要准确描述并搜索你的问题,也对英语水平略有要求,但是这是值得的。你想想,英语社区是全球Python用户在使用和交流,而中文则只有国内,你觉得在哪里更有可能找到问题的答案?学编程顺便把英语也学了,多好,哈哈。
但是如果你要提问,一定要学会提问。就我经历过的,就有很多扎心的问题,有时甚至让人有些恼火。报错以后,不检查代码张嘴就问,结果是自己写错了一个字母,漏了一个括号;还有连报错信息都不给我,把代码截个图就问我哪错了,当我是人肉编译器???
当你要提问时,记住以下几点:
- 解释你想做什么,而不要只说你做了什么。这样懂行的往往一眼就能看出你是不是走错了方向。
- 明确发生错误的时刻。错误是一直就有还是在你进行了某一操作之后?
- 将你的代码和报错信息完整的展示出来
- 说明你为解决这个问题都做了哪些努力。一方面为帮助者排除一些可能,另一方面,也显示出你自己努力过了,不是一个伸手党。
- 说明你的Python版本和操作系统机器版本。
- 如果错误出现在你修改了你的代码后,说明你做了什么修改。
- 说明你是否能够每次复现你的错误。是每次运行程序都报错,还是只有进行某些操作后报错?是的话,是哪些操作?
大概就是这个思路,总之,注意网络礼节,不要当伸手党。
结语
最后直接引用Al Sweigart的一段话作为结语吧:
For most people, their computer is just an appliance instead of a tool. But by learning how to program, you’ll gain access to one of the most powerful tools of the modern world, and you’ll have fun along the way. Programming isn’t brain surgery—it’s fine for amateurs to experiment and make mistakes.
中文版:想要吃鸡?蟒就行了!