Python入门教程FROM:http://www.cnblogs.com/taowen/articles/11239.aspx作者:taowen,billrice
Lesson1准备好学习Python的环境
下载的地址是:
www.python.org
linux版本的我就不说了,因为如果你能够使用linux并安装好说明你可以一切自己搞定的。
运行环境可以是linux或者是windows:
1、linux
redhat的linux安装上去之后一定会有python的(必须的组件),在命令行中输入python回车。这样就可以进入一个
>>>的提示符
2、windows
安装好了python之后,在开始菜单里面找到Python2.3->IDLE,运行也会进入一个有
>>>提示符的窗口
开始尝试Python
1、输入:
welcome="Hello!"
回车
然后又回到了>>>
2、输入:
printwelcome
回车
然后就可以看到你自己输入的问候了。
Lesson2搞定环境之后的前行
Python有一个交互式的命令行,大家已经看到了吧。所以可以比较方便的学习和尝试,不用“新建-存档-编译-调试”,非常适合快速的尝试。
一开始从变量开始(其实说变量,更准确的是对象,Python中什么都可以理解为对象)。
变量
welcome="hello!"
welcome就是变量名,字符串就是变量的类型,hello!就是变量的内容,""表示这个变量是字符串,""中间的是字符串的内容。
熟悉其他语言的人,特别是编译类型的语言,觉得没有变量的声明很奇怪。在python中用赋值来表示我要这么一个变量,即使你不知道要放什么内容,只是要先弄一个地方来放你的东西,也要这么写:
store=""
不过这个还是说明了store是字符串,因为""的缘故。
haveatry
tmp_storage=""
welcome="hello!"
tmp_storage=welcome
printtmp_storage
你会发现同样的问候出现了。
字符串
字符串是用""标记的,但是用''也可以(不要说你看不出一个是双引号,一个是单引号),两者之间是有一丁点区别,不过你可以不用理会。其实是差不多的。字符串有很多自己的操作,最常用的是这样的:
welcome="hello"
you="world!"
printwelcome+you
运行之后就会发现她输出了helloworld!。
更多变量
变量还有几种类型。
数
字符串
列表
字典
文件
勿庸置疑,这些都是非常非常常用的。对于数字就不用讲了那就是:
radius=10
pi=3.14
area=pi*radius**2
print"theareais",area
下次讲列表和字典
Lesson3Python中的数学结构
数学中你学什么东西最多遍?我想根据我的一点浅薄经验(虽然我是数学系的),学得最多的是集合,无论什么数学书都从集合开始讲起。然后讲函数呢,又必然把映射再讲一遍。可以说,集合和映射是数学中最基本的结构了。
Python对于数据结构非常明智的内置了两个,回想我写C的程序,往往是一开始就是用struct拼一个链表出来(重复劳动)。Python中提供了列表(list)和字典(dict)两种数据结构。他们分别对应的原型是集合和映射。这个你应该明白了,只是表示方法有一点不一样而已。
列表
列表的英文名是list嘛,所以我取一个名字叫
my_list=[]
这个就产生了一个空的列表。然后给它赋值
my_list=[1,2]
printmy_list
my_list.append(3)
printmy_list
非常容易明白的。append前面加了一个点,这个表示append是my_list方法。我实在不想又去给你解释什么是对象,什么是成员方法,然后扯出一大段出来。
list是可以索引的:
printmy_list[1]
不过你或许会不明白为什么是2,而不是显示的是1。因为索引从0开始,要输出第一个元素:
printmy_list[0]
字典
contact={}
这个产生了一个空字典,contact。然后往里面填充内容:
contact={}
contact["name"]="taowen"
contact["phone"]=68942443
name就是你查字典的时候要查找的单词,taowen就是查到的内容。不过你现在不是查,而是在写这个字典。同理添加了phone这个词条。
现在添加好了,看看contact的内容,怎么查看?自己想办法吧。。。
如果你悟性够,就会发现python很多操作是通用的,既然能够print1,print"",printmy_list,那么其他数据类型的变量就没有理由不能用了。
结合列表和字典
contact_list=[]
contact1={}
contact1['name']='taowen'
contact1['phone']=68942443
contact_list.append(contact1)
contact2={}
contact2['name']='god'
contact2['phone']=44448888
contact_list.append(contact2)
呵呵,够复杂的吧。你可以想出我为什么要用两个contact字典呢?。。。
Lesson4用不同的方式来操作Python
到现在为止,我们用的都是交互式的命令行来操作的,的却是很方便,是吧?不过,复杂一些的情况就不那么好使了,来换一种方式来操作Python
在IDLE中点击File->NewWindow,出现一个新窗口(对于linux下,你要用vim或者emacs或者pico把文本的源文件写好了)。为了方便,先点击File->Save,填入my_try.py。这样能够让编辑器知道在编辑python的源文件,会把你输入的代码进行一点上色的处理。
填入下面的代码:
i=5
n=0
whilei>0:
n=n+i
i=i-1
printn
你会发现输入:之后,自动会给缩进。而且也没有在python中发现和C/C++中类似的{}标记也没有pascal中的beginend;,其实缩进就是python中表示一段代码的从属关系的标记方法。表示n=n+1和i=i-1这两句都是while的。程序的运行逻辑应该不用解释了吧。就是运行5+4+3+2+1的结果。
运行代码
按F5,可能提示你没有存盘,照着办就是了。
发挥你的能力,计算从1到10的所有偶数的和(提示,可能没有你想象的那么智能)。
Lesson5Python中的输入与判断
健全的程序大凡都需要输入的功能,所以要学习一下简单的输入:
输入要使用的是raw_input或者input函数,区别是raw_input直接把你的输入作为字符串返回,而input则在raw_input的基础上把字符串转换为数字返回(如果你输入$@#$$怎么办?自己试试看)。我们就利用这两个输入函数来作一些有趣的事情。
your_name=raw_input("pleaseinputyourname:")
hint="welcome!%s"%your_name
printhint
不简单吧,还有%呢。%s表示在这个位置插入一个字符串,%表示把后面提供的参数“推”入前面的字符串中,所以推的结果是把%s推出去了,把your_name给填入那个地方了。printf知道吧,C中的printf就是一样的嘛。
inputed_num=0
while1:
inputed_num=input("inputanumberbetween1and10")
ifinputed_num>=10:
pass
elifinputed_num<1:
pass
else:
break
print"hehe,don'tfollow,won'tout"
pass就是pass了,过了嘛,什么都不干了。break就是跳出这个while1(无穷循环,1总是真的,while总是执行)。是换行,不会全部忘光了吧。
Lesson6Python余兴节目
代码:[复制到剪贴板]
fromTkinterimport*
root=Tk()
w=Label(root,text="Hello,world!")
w.pack()
root.mainloop()
呵呵,一次太超前了一点,不过也不是解释不清楚。我干脆也不解释了吧。给大家增进一点兴趣。
---------
还是解释一下
fromtTkinterimport*
是引入一个模块,这个模块用来创建GUI(GraphicUserInterface)窗口
Tk()创建了一个主窗口
Label()创建一个标签
Label的第一个参数是root表明Label是在这个主窗口中的。
w.pack()是指用缺省的方式把Label放置在主窗口中
root.mainloop()开始了一个循环,是等待你的输入的循环。
Lesson7Python基本语法要素齐动员
现在的目的是尽量想出一个用的东西仅限于内置的变量类型和语句的一个综合的例子,我想还是那个联系人表的例子吧
################
#呵呵,还忘记了讲注释
#第一个算是完整的程序
################
contact={}
contact_list=[]
while1:
contact['name']=raw_input("pleaseinputname:")
contact['phone']=raw_input("pleaseinputphonenumber:")
contact_list.append(contact.copy())
go_on=raw_input("continue?")
ifgo_on=="yes":
pass
elifgo_on=="no":
break
else:
print"youdidn'tsayno"
i=1
forcontactincontact_list:
print"%d:name=%s"%(i,contact['name'])
print"%d:phone=%s"%(i,contact['phone'])
i=i+1
首先是回忆一下字符串
字符串既能够用""也能够用''。然后是很有特色的%操作,起到格式化字符串的作用,前面仅仅在字符串中有一个%s,现在有%d和%s两个,分别代表插入十进制数值和字符串于%x标记的位置处。
然后是列表
列表是顺序的序列,用append在后面附加,也能构用索引值索引。所以我们完全可以用一个变量保存len(contact_list)得到的长度,然后一个个的遍历,不过这里展示了另外一种非常方便的方法。而且值得注意的是append()中的参数,我使用了contact.copy(),你可以尝试着把copy()给去掉,观察结果你就知道了所谓的append是怎么干的了,特别是你对指针之类的东西很有感觉的话(但是在Python中是没有指针这个概念的)
再来看看字典
字典是键(key)和值(value)的对应组合成的无序的序列。所以你存的时候要指明键(name或者phone),而且取的时候也是一样的。
接下来是判断
if是很好用的,==表示判断两个是否相等,=表示把右边的赋给左边的。而且可以直接判断字符串是否相等,这个太方便了,如果你曾经用过strcpy()的话,就知道了。elif是表示elseif的意思,如果if不满足就判断elif的条件是否满足,最后是到else中去。
循环是个主体
while和for都是循环。不过这里while就没什么说的了,又是很经典的while1,死循环,然后必须在里面用break来跳出。for和C中的for是不一样的,forin才是一个完整的语句,指的是从一个能够逐一取值的序列中(比如list),一个一个的取出值赋给for后面指定的变量中,直到取空,循环结束。其实回想一般用C中的for的经历,也大体如此。而且你还可以用foriinrange(1,100)来指定一个范围从多少到多少。可以说forin充分体现了python的体贴周到,用起来很直观,不会绕弯。
接下来就是运行了,大家慢慢调试吧。下次可能是讲异常处理,因为我觉得在深入到使用各种高级的要素之前,先要学会怎么去处理异常。最常见的异常应该是input(),然后你给出的输入是一个无法转换为数字的字符串了,那么我们就要来处理它。
Lesson8Python中的错误检测
写程序什么最重要?完成功能最重要。但是程序中难免要有用户的输入,对于这些写的时候未可预知的因素中间可能出现的错误,一般称作异常。对于异常情况的处理,不同语言有不同的做法,比如检查函数的返回值之类的,但是那种办法会把代码弄成一团浆糊。Python在这个方面是比较先进的,我们从一个例子来看看:
printinput()
呵呵,看不同吧。其实input是输入,print是输出。也就是把输入的东西立即输出。但是这个和
printraw_input()
有什么不同呢?
不同的地方是,input()会在raw_input()接收了“字符串”的输入之后进行一些处理,比如你是输入1+2,然后输出的就是3了,而raw_input就是原原本本的1+2的输出了。用代码表示就是
eval(raw_input())
eval是求表达式的值,任何一个简单的python表达式,就像1+2这样的作为字符串送入,就能把值从eval处理之后取出来。
现在你实验一下"sdfsdf”之后,你会发现提示你
引用:
Traceback(mostrecentcalllast):
File"<pyshell#4>",line1,in-toplevel-
input()
File"<string>",line0,in-toplevel-
NameError:name'sdfsdf'isnotdefined
如果输入其他稀奇古怪的字符串还可能有其他的出错提示,我们现在要做的就是捕捉这种由用户输入引起的错误。这么来作:
try:
printinput()
except:
print'thereisanerrorinyourinput'
这下你无论怎么输入都不会有什么其他的提示了,就是自己设定的print语句作为提示。现在把tryexcept的组合去掉,回到printinput()你再尝试一下:
1/0
这个显然是一个错误,被零除的错误。那么专门来捕捉一下这个错误:
try:
printinput()
exceptZeroDivisionError:
print'cannotbedividedbyzero'
这下你能够捕捉到被零除的错误了。然后你再尝试其他的输入,可能错误就没有被捕捉了。所以再补上:
try:
printinput()
exceptZeroDivisionError:
print'cannotbedividedbyzero'
except:
print'thereisanerrorinyourinput'
注意,捕捉所有错误的except必须放在所有的except的最后一位。明白了?OK
还有更多的能够捕捉的错误,自己查手册吧(暂时看不了手册没关系,慢慢来嘛)。以后还能够自己raise(引发)异常呢。不过那都是比较高级的应用了,对于出错处理从一开始就有这个印象,并牢记在心中对于以后写大一些的软件很有好处。