1、we-lisgaes-irH-aygliscvyuta.yFuuuiiaiveeesue一e-1..ewe-fae-ccTeea-a-ei-ci-accrcvtiar.-je.v-i-Accdigtoctyd-ilineandmuicpalo.aizainDe1ametr-ur-es"0dlyhed"mplmentimpeatonindepedetCmmssonagainscorrutongudeieseectvestegteniged.sco
2、nstucton-tpcdimocatc.emana-scloeconacthouggtadwrkacua,contolceckdsticStadngc.mmi-ee1adtepesnaimpllmetainipedetCmmsson”nstnnsShangexssof.”,ipthcaredouccitcsmadselciialurher.rec.iondiecionadmer-efecenhancednpolitcsofc0nsione-andinitatvefimsegoodofrungmae.refretem-“te,
4、n的(必须的组件),在命令行中输入python回车。这样就可以进入一个>>>的提示符2、windows安装好了python之后,在开始菜单里面找到Python2.3->IDLE,运行也会进入一个有>>>提示符的窗口开始尝试Python1、输入:welcome="Hello!"回车然后又回到了>>>2、输入:printwelcome回车然后就可以看到你自己输入的问候了。Lesson2搞定环境之后的前行Python有一个交互式的命令行,大家已经看到了吧。所以可以比较方便的学习和尝试,不用新建-存档-
6、字符串,因为""的缘故。Accdigtocty.、"nean.m-icpalo.aizainiee1ametrrqurrmes.t0ddyhed"mplmentimpeatonin.epe.etCmmssonagains.orr.tongudeieseectve"egtenige.s.onst-cton"tpc.dmocatcle,mana-"cloeconacth.gta.wrkacua,contolceck.sticStadngc
7、.mmi-eea.tepe-alimpllmetaini-pe.etCmmsson”nsn-Shangexssofp”.i-pthcare.ouci1csma.“ciiclurher.rec.ion.ieciona.mer-efecenance.np011csofconan.initatvefirm”go.ofrungmae.Bfretem-“te,aae-s1slcttdaviews,ccmbe.,reatdte"idnghaveatry代码:复制到剪贴板tmp_stor
8、age=""welcome="hello!"tmp_storage=welcomeprinttmp_storage你会发现同样的问候出现了。字符串字符串是用""标记的,但是用”也可以(不要说你看不出一个是双引号,一个是单引号),两者之间是有一丁点区别,不过你可以不用理会。其实是差不多的。字符串有很多自己的操作,最常用的是这样的:代码:复制到剪贴板welcome="hello"you="world!"printwelcome+you运行之后就会发现她输出了hellowor
9、ld!。更多变量变量还有几种类型。数字符串列表字典文件勿庸置疑,这些都是非常非常常用的。对于数字就不用讲了那就是:代码:复制到剪贴板radius=10pi=3.14area=pi*radius*2print"theareais",area下次讲列表和字典Lesson3Python中的数学结构数学中你学什么东西最多遍?我想根据我的一点浅薄经验(II虽然我是数学系的),学得最多的是集合,无论什么数学书都从集合开始讲起。然后讲函数呢,又必然把映射再讲一遍。可以说,集合和映射是数学中最基本的结构了。Python对于数据结构非常明智的内置了两个,回想
10、我写C的程序,往往是一开始就是用母人山十臼芾struct拼一个链表出来(II重复方动)。Python中提供了列表(list)和子典(diet)两种数据结构。他们分别对应的原型是集合和映射。这个你应该明白了,只是表示方法有一点不一样而已。列表列表的英文名是list嘛,所以我取一个名字叫代码:复制到剪贴板my_list=这个就产生了一个空的列表。然后给它赋值my_list=1,2printmy_listmy_list.append(3)printmy_list非常容易明白的。append前面加了一个点,这个表示append是my_list方法。我实在不想又去给你解释什么是
11、对象,什么是成员方法,然后扯出一大段出来。list是可以索引的:printmy_list1不过你最许会不明白为什么是2,而不是显示的是1。因为索引从0开始,要输出第一个元素:printmy_list0字典代码:复制到剪贴板contact=这个产生了一个空字典,contact。然后往里面填充内容:代码:复制到剪贴板contact=contact"name"="taowen"contact"phone"=Accdigtocty.、"nean.m-icpalo.aizainiee1ametrrqurrmes.
12、t0ddyhed"mplmentimpeatonin.epe.etCmmssonagains.orr.tongudeieseectve"egtenige.s.onst-cton"tpc.dmocatcle,mana-"cloeconacth.gta.wrkacua,contolceck.sticStadngc.mmi-eea.tepe-alimpllmetaini-pe.etCmmsson”nsn-Shangexssofp”.i-pthcar
13、e.ouci1csma.“ciiclurher.rec.ion.ieciona.mer-efecenance.np011csofconan.initatvefirm”go.ofrungmae.Bfretem-“te,aae-s1slcttdaviews,ccmbe.,reatdte"idngname就是你查字典的时候要查找的单词,taowen就是查到的内容。不过你现在不是查,而是在写这个字典。同理添加了phone这个词条。现在添加好了,看看contact的内容,怎么查看?自己想办法吧。如果你悟性够,就会发现
15、d(contact2)呵呵,够复杂的吧。你可以想出我为什么要用两个contact字典呢?Lesson4用不同的方式来操作Python到现在为止,我们用的都是交互式的命令行来操作的,的却是很方便,是吧?不过,复杂一些的情况就不那么好使了,来换一种方式来操作Python在IDLE中点击File->NewWindow,出现一个新窗口(对于linux下,你要用vim或者emacs或者pico把文本的源文件写好了)。为了方便,先点击File->Save,填入my_try.py这样能够让编辑器知道在编辑python的源文件,会把你输入的代码进行一点上色的处理。填入下面的代码:
16、代码:复制到剪贴板i=5n=0whilei>0:n=n+ii=i-1printn你会发现输入:之后,自动会给缩进。而且也没有在python中发现和C/C+中类似的标记也没有pascal中的beginend;,其实缩进就是python中表示一段代码的从属关系的标记方法。表示n=n+1和i=i-1这两句都是while的。程序的运行逻辑应该不用解释we-lisgaes-irH-aygliscvyuta.yFuuuiiaiveeesue一e-1..ewe-fae-ccTeea-a-ei-ci-ac
17、crcvtiar.-je.v-i-siegaaiea-meeee-ael-eee-ee-g-l-ef-i-e-laesl-eae-1sw-l-a-aa-esa--eea-.ee-g-u-leex-e-aal-lf-faaassfvlesus-ie---agBf-e-i-hai-akeslee1te-a了吧。就是运行5+4+3+2+1的结果。运行代码按F5,可能提示你没有存盘,照着办就是了。发挥你的能力,计算从1到10的所有偶数的和(提示,可能没有你想象的那么智能)。Lesson5Py
18、thon中的输入与判断健全的程序大凡都需要输入的功能,所以要学习一下简单的输入:输入要使用的是raw_input或者input函数,区别是raw_input直接把你的输入作为字符串返回,而input则在raw_input的基础上把字符串转换为数字返回(如果你输入$#$怎么办?自己试试看)。我们就利用这两个输入函数来作一些有趣的事情。代码:复制到剪贴板your_name=raw_input("pleaseinputyourname:")hint="welcome!%s"%your_nameprinthint不简单吧,还有呢。s表示在
21、onin.epe.etCmmssonagains.orr.tongudeieseectve"egtenige.s.onst-cton"tpc.dmocatcle,mana-"cloeconacth.gta.wrkacua,contolceck.sticStadngc.mmi-eea.tepe-alimpllmetaini-pe.etCmmsson”nsn-Shangexssofp”.i-pthcare.ouci1csma.“ciiclurher.rec
22、.ion.ieciona.mer-efecenance.np011csofconan.initatvefirm”go.ofrungmae.Bfretem-“te,aae-s1slcttdaviews,ccmbe.,reatdte"idngw.pack()root.mainloop()呵呵,一次太超前了一点,不过也不是解释不清楚。我干脆也不解释了吧。给大家增进一点兴趣。还是解释一下fromtTkinterimport*是引入一个模块,这个模块用来创建GUI(GraphicUserInterface)窗口Tk()
26、len(contact_list)得到的长度,然后一个个的遍历,不过这里展示了另外一种非常方便的方法。而且值得注意的是append()中的参数,我使用了contact.copy(),你可以尝试着把copy()给去掉,观察结果你就知道了所谓的append是怎么干的了,特别是你对指针之类的东西很有感觉的话(但是在Python中是没有指针这个概念的)再来看看字典字典是键(key)和值(value)的对应组合成的无序的序列。所以你存的时候要指明键(name或者phone),而且取的时候也是一样的。接下来是判断if是很好用的,=表示判断两个是否相等,=表示把右边的赋给左边的。而且可以直接判断字
27、符串是否相等,这个太方便了,如果你曾经用过strcpy()的话,就知道了。elif是表示elseif的意思,如果if不满足就判断elif的条件是否满足,最后是到else中去。循环是个主体while和for都是循环。不过这里while就没什么说的了,又是很经典的while1,死循环,然后必须在里面用break来跳出。for和C中的for是不一1的,forin才是一个完整的语句,指的是从一个能够逐一取值的序列中(比如list),一个一个的取出值赋给for后面指定的变量中,直到取空,循环结束。其实回想一般用C中的for的经历,也大体如此。而且你还可以用foriinrang
28、e(1,100)来指定一个范围从多少到多少。可以说foNn充分体现了python的体贴周到,用起来很直观,不会绕弯。接下来就是运行了,大家慢慢调试吧。下次可能是讲异常处理,因为我觉得在深入到使用各种高级的要素之前,先要学会怎么去处理异常。最常见的异常应该是input(),然后你给出的输入是一个无法转换为数字的字符串了,那么我们就要来处理它。Lesson8Python中的错误检测写程序什么最重要?完成功能最重要。但是程序中难免要有用户的输入,对于这些写的时候未可预知的因素中间可能出现的错误,一般称作异常。对于异常情况的处理,不同语言有不同的做法,比如检查函数的返回值之类的,但是那种办法
29、会把代码弄成一团浆糊。Python在这个方面是比较先进的,我们从一个例子来看看:代码:复制到剪贴板printinput()Accdigtocty.、"nean.m-icpalo.aizainiee1ametrrqurrmes.t0ddyhed"mplmentimpeatonin.epe.etCmmssonagains.orr.tongudeieseectve"egtenige.s.onst-cton"tpc.dmocatcle,mana-"cloeconacth.gta.
30、wrkacua,contolceck.sticStadngc.mmi-eea.tepe-alimpllmetaini-pe.etCmmsson”nsn-Shangexssofp”.i-pthcare.ouci1csma.“ciiclurher.rec.ion.ieciona.mer-efecenance.np011csofconan.initatvefirm”go.ofrungmae.Bfretem-“te,aae-s1slcttdaviews,ccmbe.,reatd
31、te"idng呵呵,看不同吧。其实input是输入,print是输出。也就是把输入的东西立即输出。但是这个和代码:复制到剪贴板printraw_input()有什么不同呢?不同的地方是,input()会在raw_input()接收了字符串”的输入之后进行一些处理,比如你是输入1+2,然后输出的就是3了,而raw_input就是原原本本的1+2的输出了。用代码表示就是代码:复制到剪贴板eval(raw_input()eval是求表达式的值,任何一个简单的python表达式,就像1+2这样的作为字符串送入,就能把值从eval处理之后取出来。现在你实验一下"sd
35、的软件很有好处。Lesson9走向模块化的第一步大规模的程序设计需要你把一个大的程序拆分成n个模块。然后把模块进行组合,交互成为一个完整的程序。你不可能像现在这样,从顶写到尾。那么我们从函数开始。代码:复制到剪贴板defsquare(x):returnx*2printsquare(5)简单吧,这个是我看过的函数定义中最简洁的。def表示这个开始定义一个函数,x是参数,参数是不需要类型的,因为python是不需要明确指出类型的。return是返回值,返回的值插入到调用函数的地方。再复杂一些代码:复制到剪贴板defmultiply(a,b):returna*bAccd
36、igtocty.、"nean.m-icpalo.aizainiee1ametrrqurrmes.t0ddyhed"mplmentimpeatonin.epe.etCmmssonagains.orr.tongudeieseectve"egtenige.s.onst-cton"tpc.dmocatcle,mana-"cloeconacth.gta.wrkacua,contolceck.sticStadngc.mmi-eea.tepe-alimpllm
37、etaini-pe.etCmmsson”nsn-Shangexssofp”.i-pthcare.ouci1csma.“ciiclurher.rec.ion.ieciona.mer-efecenance.np011csofconan.initatvefirm”go.ofrungmae.Bfretem-“te,aae-s1slcttdaviews,ccmbe.,reatdte"idngprintmultiply(1,2)这是两个参数的函数。那么返回两个值呢代码:复制到剪贴板defsw
38、ap(a,b):return(b,a)printswap(1,2)呵呵,其实这里返回的并不是两个值,而是一个值。怎么说呢。(b,a)就是一个东西,是一个元组(turple),你可以用这样的方式成生一个元组,并使用它。元组是基本的变量类型:代码:复制到剪贴板my_turple=(1,2,3)my_list=foriinmy_turple:my_list.append(i)printmy_list其实元组和列表非常像,但是列表的长度是可以变化的,而且成员是可以改变的。但是元组是什么都不能变的,是只读的。对于高级一点的话题:传递进来的参数是否可以被修改,这个问题取决
40、on的文件操作文件操作.是一个语言和外界联系的主要方法.现在以txt为例简单的讲一下.siegaaiea-meeee-ael-eee-ee-g-l-ef-i-e-laesl-eae-1sw--l-a-aa-esa--eea-.ee-g-u-leex-e-aal-lf-faaassfvlesus-ie--agBf-e-i-hai-akeslee1te-a首先是建立关联假设在存在以下文件c:a.txt代码:复制到剪贴板Thisisline#1Thisisline#2Thisisline#3END代码
43、;forxxx_lineinxxx.readlines():Accdigtocty.、"nean.m-icpalo.aizainiee1ametrrqurrmes.t0ddyhed"mplmentimpeatonin.epe.etCmmssonagains.orr.tongudeieseectve"egtenige.s.onst-cton"tpc.dmocatcle,mana-"cloeconacth.gta.wrkacua,contolceck.st
48、ame,self.id)me=person()me.say_id()比较复杂了吧。如果不熟悉面向对象的概念的,可能会觉得晕。我来解释一下。所谓面向对象是把数据和操作数据的函数放到同一个类中去,然后用类来创建对象,操作的时候能够比较方便(很不精确的说法,任何一个OO局手都可以把我骂得屁都不是L_J)。类类是class关键来定义的。classperson:就是说定义一个类,名字叫person。对象对象是用类来产生的。所以me就是对象,产生的办法就是像调用函数一样,person(),而且()中是能够放参数的,什么时候要参数,看下面的初始化函数"初始化函数类可以有自己的初
50、,self.id)me=person()me.say_id()printme.school对象的数据rojecwork,cades,ressctonandotheraspecsofataof19,futedeiedthe“in,enha*,thepetie.-andeleCVenessof.icalcIfeGoodfortsmeeingwereqe.theSandingCcmmiteeoftemuni“"anyCcmmiee,muiCpalSeceay
51、GeneraTa.“,theC*C.mm-onfordiscipieinspectonSandingC.mmiagXu,JangJXueDpUyDrectoroftepersonneloffCeandotherleadingcmradespreentguidacealwsustowamappausefortheirwecmea.thankswIfistDstcCommteememberofthe20XXteamannual-meat,meeiigm.ementatonofthec
52、recvemeasues,welasmemberofthee-a.ofmyownreportguiforthemtheipemen!C.mmonagatscrruptionsaemen"vsaidcmadesctcsm.Fistannualpalyonthe20XXteam,Memberofotclieactinpanmpiemetaion,20xx,distcAccdigtocty.、"nean.m-icpalo.aizainiee1ametrrqurrmes.t0
53、ddyhed"mplmentimpeatonin.epe.etCmmssonagains.orr.tongudeieseectve"egtenige.s.onst-cton"tpc.dmocatcle,mana-"cloeconacth.gta.wrkacua,contolceck.sticStadngc.mmi-eea.tepe-alimpllmetaini-pe.etCmmsson”nsn-Shangexssofp”.i-pthcare.
54、ouci1csma.“ciiclurher.rec.ion.ieciona.mer-efecenance.np011csofconan.initatvefirm”go.ofrungmae.Bfretem-“te,aae-s1slcttdaviews,ccmbe.,reatdte"idng对象的数据是用self.变量名=。来生成的。这里就是对象的数据。对象的数据和类的数据不同,因为对象之间的数据是互不共享的,而类的数据是被所有由类生成的对象共享的。对象的函数(类的函数)两个没有区别,是类的就是对象的。其实
55、就是类的(我说的是底层实现,不过不用管,如果关心怎么实现的,等我写HackingOO吧,还没影呢)。say_id就是对象的函数,你能够调用它。每个对象的函数都需要一个self参数,表示color这个对象/color。为什么使用面向对象编程除去让人觉得你比较专业外,当然由切实的好处。比较浅显的是你能够表达一定的层次关系,类与类之间能够有包含和继承的关系(当然你现在还不会。)。而且对象能够把数据和操作数据的函数放在一起,能够比较清晰。虽然有所谓的数据隐藏的概念,但是在python中其实就是一个不要直接调用对象中的数据的约定,而要用一个函数作为中转。其实不懂面向对象很正常,其实有的时候
56、就是要在用的中间感悟的。什么时候把用函数编程用牛了,用出个道道来了,说不定你已经感觉到了什么是面向对象编程。另外:所谓什么OO,都是一些认为规定,不用语法支持,只要心中有这个想法(什么想法?自己悟啊Ih,就能够写出OO的代码,不管你用的是什么语言,什么语法。Lesson12pythontoexeaboutpy2exe本文讲述如何将一个python源代码编译成一个exe.我会的只是最初步最基本的.实际上那个py2exe似乎有着更强大的功能1:下载安装py2exe.from2:假设你写好了一个python程序.guess_nu
57、mber.py存在了下面3:再写一个setup.py.也存在下面内容如下代码:复制到剪贴板#setup.pyfromdistutils.coreimportsetupimportpy2exesetup(name="guess_number",scripts="guess_number.py",)we-lisgaes-irH-aygliscvyuta.yFuuuiiaiveeesue一e-1..ewe-fae-ccTeea-a-ei-ci-accrcvtiar.-je.v-i-其中name和scripts是需要你到时候具体修改的.4:找到windows的dos模式(命令提示符).或者自己做个快捷方式也可以.C:Python23>C:Python23>pythonsetup.pypy2exe构造就开始了.几秒钟以后.在你的C:Python23就会出