Python入门经典.docx
- 文档编号:6836219
- 上传时间:2023-01-11
- 格式:DOCX
- 页数:54
- 大小:60.07KB
Python入门经典.docx
《Python入门经典.docx》由会员分享,可在线阅读,更多相关《Python入门经典.docx(54页珍藏版)》请在冰豆网上搜索。
Python入门经典
Python入门教材
∙第一章介绍
∙第二章解释程序的使用
∙第三章基本使用
∙第四章流程控制
∙第五章Python数据结构
∙第六章模块
∙第七章输入输出
∙第八章错误与例外
∙第九章类
∙第十章进一步学习
第一章介绍
脚本语言是类似DOS批处理、UNIXshell程序的语言。
脚本语言不需要每次编译再执行,并且在执行中可以很容易地访问正在运行的程序,甚至可以动态地修改正在运行的程序,适用于快速地开发以及完成一些简单的任务。
在使用脚本语言时常常需要增的新的功能,但有时因为脚本语言本来就已经很慢、很大、很复杂了而不能实现;或者,所需的功能涉及只能用C语言提供的系统调用或其他函数——通常所要解决的问题没有重要到必须用C语言重写的程度;或者,解决问题需要诸如可变长度字符串等数据类型(如文件名的有序列表),这样的数据类型在脚本语言中十分容易而C语言则需要很多工作才能实现;或者,编程者不熟悉C语言:
这些情况下还是可以使用脚本语言的。
在这样的情况下,Python可能正好适合你的需要。
Python使用简单,但它是一个真正的程序语言,而且比shell提供了更多结构和对大型程序的支持。
另一方面,它比C提供更多的错误检查,它是一个非常高级的语言,内置了各种高级数据结构,如灵活的数组和字典,这些数据结构要用C高效实现的话可能要花费你几天的时间。
由于Python具有更一般的数据结构,它比Awk甚至Perl适用的范围都广,而许多东西在Python内至少和在这些语言内一样容易。
Python允许你把程序分解为模块,模块可以在其他Python程序中重用。
它带有一大批标准模块可以作为你自己的程序的基础——或作为学习Python编程的例子。
系统还提供了关于文件输入输出、系统调用、插座(sockets)的东西,甚至提供了窗口系统(STDWIN)的通用接口。
Python是一个解释性语言,因为不需要编译和连接所以能节省大量的程序开发时间。
解释程序可以交互使用,这样可以可以很容易地试验语言的各种特色,写只用一次的程序,或在从底向上程序开发中测试函数。
它也是一个方便的计算器。
Python允许你写出非常严谨而且可读的程序。
用Python写的程序通常都比相应的C程序要短,因为如下几个理由:
∙高级的数据结构允许你用一个语句表达复杂的操作;
∙复合语句是靠缩进而不是用表示开始和结束的括号;
∙不需要变量声明或参量声明。
∙Python是可扩充的:
如果你会用C语言编程就很容易为解释程序增加新的内置函数或模块,这样可以以最快速度执行关键操作,或把Python程序和只能以二进制码提供的库(如不同厂商提供的图形库)连接起来。
当你变得确实很在行时你可以把Python解释器与用C写的应用相连接,把它作为该应用的扩展或命令语言。
Python的命名是由BBC的“MontyPython'sFlyingCircus”节目而得,与蟒蛇没有什么关系。
第二章解释程序的使用
在命令行键入
python
或在Windows环境下双击相应的图标可以进入Python的解释程序。
如果要运行储存在文件中的Python程序,可以用
python文件名
的形式。
进入解释程序的环境后,解释程序称为处于交互状态。
在这种状态下系统用主提示提示输入下一个命令,这一般是三个大于号(>>>),如果需要续行系统用次提示提示输入,缺省为三个小数点(...)。
在主提示下键入文件尾符号(在UNIX中为Control-D,在DOS或Windows中为Control-Z)可以正常退出解释程序。
Python解释程序的有些版本支持命令行编辑和命令历史,使用用Emacs或vi的键组合。
第三章基本使用
下面我们用例子来介绍Python的基本用法。
在例子中,用户输入和系统输出靠有没有提示(>>>和...)来分别。
如果要试这些例子的话,需要键入提示后的所有命令,例子中没有提示的行是系统的输出。
注意只有次提示的行意味着需要键入一个空行,这用于结束多行命令。
3.1用Python作计算器使用
启动解释程序,等待主提示>>>出现。
解释程序可以作为计算器使用。
键入一个表达式,解释程序就可以输出结果。
表达式的写法很直观:
+,-,*,/,%,**等算符的作用和其它大多数语言(如Pascal或C)没什么差别,括号可以用来组合。
例如:
>>>2+2
4
>>>#这是一个注释
...2+2
4
>>>2+2#和代码在同一行的注释
4
>>>(50-5*6)/4
5
>>>#整数除法得下面的整数
...7/3
2
>>>7/-3
-3
>>>
和C中一样,等于号用来给变量赋值,赋值的结果不显示:
>>>width=20
>>>height=5*9
>>>width*height
900
>>>
可以同时给几个变量赋同一个值:
>>>x=y=z=0#把x,y和z赋零
>>>x
0
>>>y
0
>>>z
0
>>>
Python完全支持浮点数,混合类型的运算会把整数先转换成浮点数:
>>>4*2.5/3.3
3.0303030303
>>>7.0/2
3.5
>>>
Python也提供了复数,方法是用j和J作为虚数单位,如1+1j,3.14e-10j,等等。
3.2.字符串
Python除处理数字外还可以处理字符串,字符串用单撇号或双撇号包裹:
>>>'spameggs'
'spameggs'
>>>'doesn\'t'
"doesn't"
>>>"doesn't"
"doesn't"
>>>'"Yes,"hesaid.'
'"Yes,"hesaid.'
>>>"\"Yes,\"hesaid."
'"Yes,"hesaid.'
>>>'"Isn\'t,"shesaid.'
'"Isn\'t,"shesaid.'
>>>
字符串输出格式与输入的样子相同,都是用撇号包裹,撇号和其它特殊字符用用反斜杠转义。
如果字符串中有单撇号而没有双撇号则用双撇号包裹,否则应该用单撇号包裹。
后面要介绍的print语句可以不带撇号或转义输出字符串。
字符串可以用+号连接起来,用*号重复:
>>>word='Help'+'A'
>>>word
'HelpA'
>>>'<'+word*5+'>'
'
>>>
字符串可以象在C中那样用下标索引,字符串的第一个字符下标为0。
Python没有单独的字符数据类型,一个字符就是长度为一的字符串。
象在Icon语言中那样,可以用片段(slice)记号来指定子串,片段即用冒号隔开的两个下标。
>>>word[4]
'A'
>>>word[0:
2]
'He'
>>>word[2:
4]
'lp'
>>>
片段有很好的缺省值:
第一下标省略时缺省为零,第二下标省略时缺省为字符串的长度。
>>>word[:
2]#前两个字符
'He'
>>>word[2:
]#除前两个字符串外的部分
'lpA'
>>>
注意s[:
i]+s[i:
]等于s是片段运算的一个有用的恒等式。
>>>word[:
2]+word[2:
]
'HelpA'
>>>word[:
3]+word[3:
]
'HelpA'
>>>
不合理的片段下标可以很好地得到解释:
过大的下标被换成字符串长度,上界小于下界时返回空串。
>>>word[1:
100]
'elpA'
>>>word[10:
]
''
>>>word[2:
1]
''
>>>
下标允许为负数,这时从右向左数。
例如:
>>>word[-1]#最后一个字符
'A'
>>>word[-2]#倒数第二个字符
'p'
>>>word[-2:
]#最后两个字符
'pA'
>>>word[:
-2]#除最后两个字符外的部分
'Hel'
>>>
但要注意的是-0实际还是0,所以它不会从右向左数!
>>>word[-0]#(因为-0等于0)
'H'
>>>
超出范围的片段下标被截断,但在非片段的情况下不要这样:
>>>word[-100:
]
'HelpA'
>>>word[-10]#错误
Traceback(innermostlast):
File"
IndexError:
stringindexoutofrange
>>>
记住片段意义的最好方法是把下标看成是字符之间的点,第一个字符的左边界号码为0。
有n个字符的字符串的最后一个字符的右边界下标为n,例如:
+---+---+---+---+---+
|H|e|l|p|A|
+---+---+---+---+---+
012345
-5-4-3-2-1
第一行数字给出字符串中下标0到5的位置,第二行给出相应的负下标。
从i到j的片段由在边界i和j之间的字符组成。
对于非负下标,如果下标都在界内,则片段的长度为下标的差。
例如,word[1:
3]的长度为2。
内置函数len()返回字符串的长度:
>>>s='supercalifragilisticexpialidocious'
>>>len(s)
34
>>>
多行的长字符串也可以用行尾反斜杠续行,续行的行首空白不被忽略,如
hello="Thisisaratherlongstringcontaining\n\
severallinesoftextjustasyouwoulddoinC.\n\
Notethatwhitespaceatthebeginningofthelineis\
significant.\n"
printhello
结果为
Thisisaratherlongstringcontaining
severallinesoftextjustasyouwoulddoinC.
Notethatwhitespaceatthebeginningofthelineissignificant.
对于特别长的字符串(比如包含说明的几段文字),如果用上面的方式每行都用\n\结尾是很麻烦的,特别是这样无法用象Emacs这样的功能强大的编辑器重新编排。
对这种情况,可以使用三重撇号,例如
hello="""
Thisstringisboundedbytripledoublequotes(3times").
Unescapednewlinesinthestringareretained,though\
itisstillpossible\ntouseallnormalescapesequences.
Whitespaceatthebeginningofalineis
significant.Ifyouneedtoincludethreeopeningquotes
youhavetoescapeatleastoneofthem,e.g.\""".
Thisstringendsinanewline.
"""
三重撇号字符串也可以用三个单撇号,没有任何语义差别。
多行的字符串常量可以直接连接起来,字符串常量之间用空格分隔则在编译时可以自动连接起来,这样可以把一个长字符串连接起来而不需要牺牲缩进对齐或性能,不象用加号连接需要运算,也不象字符串串内的换行其行首空格需要保持。
3.3列表
Python中有几种复合数据类型,用来把其它值组合到一起。
其中最灵活的是列表,可以写成在方括号之间用逗号隔开的若干值(项)。
列表的项不必取同一类型。
>>>a=['spam','eggs',100,1234]
>>>a
['spam','eggs',100,1234]
>>>
象字符串下标那样,列表下标从0开始,列表可以取片段,可以连接,等等:
>>>a[0]
'spam'
>>>a[3]
1234
>>>a[-2]
100
>>>a[1:
-1]
['eggs',100]
>>>a[:
2]+['bacon',2*2]
['spam','eggs','bacon',4]
>>>3*a[:
3]+['Boe!
']
['spam','eggs',100,'spam','eggs',100,'spam','eggs',100,'Boe!
']
>>>
与字符串不同的是列表是可变的,可以修改列表的每个元素:
>>>a
['spam','eggs',100,1234]
>>>a[2]=a[2]+23
>>>a
['spam','eggs',123,1234]
>>>
也可以给一个片段重新赋值,这甚至可以改变表的大小:
>>>#替换若干项:
...a[0:
2]=[1,12]
>>>a
[1,12,123,1234]
>>>#去掉若干项:
...a[0:
2]=[]
>>>a
[123,1234]
>>>#插入若干项:
...a[1:
1]=['bletch','xyzzy']
>>>a
[123,'bletch','xyzzy',1234]
>>>a[:
0]=a#在开头插入自身
>>>a
[123,'bletch','xyzzy',1234,123,'bletch','xyzzy',1234]
>>>
内置函数也使用于列表:
>>>len(a)
8
>>>
可以建立嵌套列表(表的元素也是列表),如:
>>>q=[2,3]
>>>p=[1,q,4]
>>>len(p)
3
>>>p[1]
[2,3]
>>>p[1][0]
2
>>>p[1].append('xtra')#列表方法
>>>p
[1,[2,3,'xtra'],4]
>>>q
[2,3,'xtra']
>>>
注意这个例子中p[1]和q实际是同一个对象!
也就是说它们只不过是同一个东西的两个名字(引用)而已。
3.4编程初步
Python当然不是只能用来把两个数加到一起,它可以完成很复杂的工作。
例如,我们可以写出Fibonacci序列的开始几个:
>>>#Fibonacci序列:
...#两个元素的和定义下一个
...a,b=0,1
>>>whileb<10:
...printb
...a,b=b,a+b
...
1
1
2
3
5
8
>>>
这个例子介绍了几个新特色。
第一行包含一个多重赋值:
变量a和b同时得到新值0和1。
在最后一行又用了多重赋值,我们可以看出赋值时先把右边都算出后再进行赋值。
while循环当循环条件(这里即:
b<10)成立时不断执行。
在Python中和C中一样,非零整数值为真值,零为假值。
条件也可以是字符串或列表或任何序列,长度为非零的为真,空序列为假。
例子中所用的是一个简单比较。
标准的比较算符和C一样:
<,>,==,<=,>=和!
=。
循环体是缩进的:
缩进是Python用来组合语句的方式。
Python目前还不能提供智能自动缩进,所以你需要自己为每个缩进行键入制表符或空格。
实际使用中你可以用文本编辑程序为Python准备复杂的输入,多数文本编辑程序都有自动缩进的功能。
在交互输入复合语句时必修附加一个空行以指示复合语句的完成(因为解释程序无法猜到哪是语句的最后一行)。
print语句显示后面的表达式值。
这和直接写出表达式不同,它可以显示多个表达式和字符串,而且可以用于程序文件中。
显示时字符串没有撇号,各项目之间插入一个空格,所以你可以以精美的格式显示,如:
>>>i=256*256
>>>print'Thevalueofiis',i
Thevalueofiis65536
>>>
在尾部写一个逗号可以避免最后换行:
>>>a,b=0,1
>>>whileb<1000:
...printb,
...a,b=b,a+b
...
1123581321345589144233377610987
>>>
注意如果前一行没有结束的话系统在显示提示之前先换行。
Python还提供了和C语言一样的printf格式的输出方式,这是用%实现的,左边是格式,如:
>>>print'Thevalueof1/7isapproximately%5.3f.'%0.142857
Thevalueof1/7isapproximately0.143.
>>>
如果有多个需要输出的项百分号右边的项可以是一个序组,如
>>>print"Name:
%-10sAge:
%3d"%("White",31)
Name:
WhiteAge:
31
第四章流程控制
前面我们已经见到了如何由用while结构控制流程运行。
这一章我们介绍更多的控制结构。
Python具有和其它语言类似的控制结构但略有差别。
4.1If语句
If语句可能是最基本的程序分支语句了。
例如:
>>>ifx<0:
...x=0
...print'Negativechangedtozero'
...elifx==0:
...print'Zero'
...elifx==1:
...print'Single'
...else:
...print'More'
...
可以有零到多个elif部分,else部分可选。
关键字elif是elseif的缩写,这样可以缩短语句行长度。
其它语言中switch或case语句可以用if...elif...elif...语句组来实现。
4.2for语句
Python中的for语句与你可能熟悉的C或者Pascal中的相应语句略有不同。
不象Pascal那样总是对数字序列进行循环,也不是象C中那样完全由程序员自由地控制循环条件和循环体,Python的for循环是对任意种类的序列(如列表或字符串)按出现次序遍历每一项。
例如:
>>>#计算字符串长:
...a=['cat','window','defenestrate']
>>>forxina:
...printx,len(x)
...
cat3
window6
defenestrate12
>>>
尽量不要在循环体内修改用来控制循环的序列(当然,只有可变的序列类型如列表才有可能被修改),这样程序可能会出问题。
如果需要这样,比如说要复制某些项,可以用序列的副本来控制循环。
片段记号让你很容易生成副本:
>>>forxina[:
]:
#生成整个列表的片段副本
...iflen(x)>6:
a.insert(0,x)
...
>>>a
['defenestrate','cat','window','defenestrate']
>>>
结果是把列表中长度超过6个字符的字符串插入到列表开头。
4.3range()函数
如果确实需要对一列数字进行循环的话,可以使用内置函数range()。
它生成包含数字序列的列表,如:
>>>range(10)
[0,1,2,3,4,5,6,7,8,9]
>>>
注意给出的终点永远不出现在生成的列表中,range(10)生成一个十个数的列表,恰好是长度为10的序列的合法下标的各个值。
也可以指定不同的起始点,或者指定不同的间隔(甚至负数):
>>>range(5,10)
[5,6,7,8,9]
>>>range(0,10,3)
[0,3,6,9]
>>>range(-10,-100,-30)
[-10,-40,-70]
>>>
为了对序列的下标进行循环,如下联合使用range()和len():
>>>a=['Mary','had','a','little','lamb']
>>>foriinrange(len(a)):
...printi,a[i]
...
0Mary
1had
2a
3little
4lamb
>>>
4.4break语句,continue语句和循环中的else子句
如同C语言一样,break语句跳出其所处的最内层的for或while循环,continue语句继续下一循环步。
循环语句还可以带一个else子句,当循环正常结束时执行其内容,但如果循环是用break语句跳出的则不执行其内容。
下例说明了这种用法,此例求素数:
>>>forninrange(2,10):
...forxinrange(2,n):
...ifn%x==0:
...printn,'equals',x,'*',n/x
...break
...else:
...printn,'isaprimenumber'
...
2isaprimenumber
3isaprimenumber
4equals2*2
5isaprimenumber
6equals2*3
7isaprimenumber
8equals2*4
9equals3*3
>>>
4.5pass语句
pass语句不执行任何操作,当语法要求一个语句而程序不需要执行操作时就用此语句。
例如:
>>>while1:
...pass#等待键盘中断
...
4.6函数定义
我们可以定义一个函数用来计算某一界限以下的所有Fibonacci序列值:
>>>deffib(n):
#写出n以下的所有Fibonacci序列值
...a,b=0,1
...whileb ...printb, ...a,b=b,a+b ... >>>#调用刚刚定义的函数: ...fib(2000) 11235813213455891442333776109871597 >>> 其中关键字def开始一个函数定义,其后应该是函数名,括号内的形参表,以冒号结束。 构成函数体的各语句从下一行开始,用一个制表符缩进。 函数的第一个语句可以是一个字符串,如果是的话,这个字符串就是函数的文档字符串,简称为docstring。 有一些工具可以利用文档字符串自动生成可打印的文档,或者让用户交互地浏览代码,所以在自己编程时加入文档字符串是一个好习惯,应该养成这
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Python 入门 经典