Python程序设计.ppt
Python程序设计,0 简介,是一种面向对象、解释型计算机程序设计语言。Python语法简洁而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C+)很轻松地联结在一起。常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C/C+重写,而后封装为Python可以调用的扩展类库。需要注意的是在您使用扩展类库时可能需要考虑平台问题,某些可能不提供跨平台的实现。,一般用途,系统编程:提供API(Application Programming Interface应用程序编程接口),能方便进行系统维护和管理,Linux下标志性语言之一,是很多系统管理员理想的编程工具。图形处理:有PIL、Tkinter等图形库支持,能方便进行图形处理。数学处理:NumPy扩展提供大量与许多标准数学库的接口。文本处理:python提供的re模块能支持正则表达式,还提供SGML,XML分析模块,许多程序员利用python进行XML程序的开发。数据库编程:程序员可通过遵循Python DB-API(数据库应用程序编程接口)规范的模块与Microsoft SQL Server,Oracle,Sybase,DB2,MySQL、SQLite等数据库通信。python自带有一个Gadfly模块,提供了一个完整的SQL环境。网络编程:提供丰富的模块支持sockets编程,能方便快速地开发分布式应用程序。很多大规模软件开发计划例如Zope,Mnet 及BitTorrent.Google都在广泛地使用它。Web编程:应用的开发语言,支持最新的XML技术。多媒体应用:Python的PyOpenGL模块封装了“OpenGL应用程序编程接口”,能进行二维和三维图像处理。PyGame模块可用于编写游戏软件。pymo引擎:PYMO全称为python memories off,是一款运行于Symbian S60V3,Symbian3,S60V5,Symbian3,Android系统上的AVG游戏引擎。因其基于python2.0平台开发,并且适用于创建秋之回忆(memories off)风格的AVG游戏,故命名为PYMO。黑客编程:python有一个hack的库,内置了你熟悉的或不熟悉的函数,但是缺少成就感。,python现在主要在做web站点(php以前做的工作,例子:豆瓣,知乎)服务器端的服务和系统(比java轻量级,开发迅速,例子,youtube,dropbox,openstack),大数据中的数据处理(报表,mapreduce)。目前看python的主要方向是取代php以及java在web服务器端的部分份额,以及在海量数据系统中起到处理数据的脚本的功能。,1 安装,下载:32位系统选“Python 2.7.5 Windows Installer”,如果是64位系统的同学选下面那个“Python 2.7.5 Windows X86-64 Installer”设置环境变量:右键单击我的电脑,依次点击属性-高级-环境变量,在“系统变量”表单中点击叫做Path的变量,然后编辑这个变量,把“;C:Python27”,也就是你刚才复制的安装路径,加到它的结尾。,2.print,print,中文意思是打印,在python里它是打印在命令行,或者叫终端、控制台里面。print是python里很基本很常见的一个操作,它的操作对象是一个字符串。基本格式是:print 你要打印的东西或者 print(你要打印的东西)这里一定要英文字符的括号。直接在print后面加一段文字来输出的话,需要给文字加上双引号或者单引号。,print除了打印文字之外,还能输出各种数字、运算结果、比较结果等。python命令行下,print是可以省略的,默认就会输出每一次命令的结果。,3 IDE,python自带了一款IDE,叫做IDLE。Windows上安装了之后,可以在“开始菜单”-“程序”-“Python 2.7”里找到它。,点击窗口上方菜单栏的“File”-“New Window”,会打一个长得很像的新窗口,但里面什么也没有。这是一个文本编辑器,在这里面就可以写我们的python程序了。继续print几行,这次可以多print一点:print Helloprint IDEprint Here I am.点击“Run”-“Run Module”,或者直接按快捷键F5。会提示你保存刚才文件,随便取个名字,比如“333.py”。(.py是python代码文件的类型,虽然不指定.py也是可以的,但建议还按规范来)保存完毕后,之前那个控制台窗口里就会一次性输出你要的结果。以后想再次编辑或运行刚才的代码,只要在IDLE里选择“File”-“Open.”,打开刚才保存的.py文件就可以了。,4 输入,input()注意,和print不同的是,这次我们必须得加上()了,而且得是英文字符的括号。raw_input(),它把所有的输入都直接当作一串字符,5 变量,变量,望文生义,就是变化的量。python里创建一个变量的方法很简单.name=CrossinmyVar=123price=5.99visible=True“=”的作用是把右边的值赋予给左边的变量。,用print输出一个“变量”:name=Crossinprint name,它叫变量,那就是能变的。所以在一次“赋值”操作之后,还可以继续给它赋予新的值,而且可以是不同类型的值。a=123print aa=hiprint a,“=”的右边还可以更复杂一点,比如是一个计算出的值:value=3*4print valuevalue=2 5print value,甚至,也可以是input():name=input()print name,print Who do you think I am?you=input()print Oh,yes!I am aprint you,6 bool,逻辑判断在编程中是非常重要的。大量的复杂程序在根本上都是建立在“真”与“假”的基本逻辑之上。而bool所表示的就是这种最单纯最本质的True/Flase,真与假,是与非。,:大于=:大于等于=:小于等于=:等于。比较两个值是否相等。之所以用两个等号,是为了和变量赋值区分开来。!=:不等与not:逻辑“非”。如果x为True,则not x为Falseand:逻辑“与”。如果x为True,且y为True,则x and y为Trueor:逻辑“或”。如果x、y中至少有一个为True,则x or y为True,num=10print Guess what I think?answer=input()result=answernumprint too big?print resultresult=answer=numprint equal?print result,7 if,if在编程语言中被称为“控制流语句”,用来控制程序的执行顺序“如果”为True,就会去执行接下来的内容。“如果”为False,就跳过if 条件:选择执行的语句特别说明:条件后面的冒号不能少,同样必须是英文字符。特别特别说明:if内部的语句需要有一个统一的缩进,一般用4个空格。python用这种方法替代了其他很多编程语言中的。你也可以选择1/2/3.个空格或者按一下tab键,但必须整个文件中都统一起来。千万不可以tab和空格混用,不然就会出现各种莫名其妙的错误。所以建议都直接用4个空格。,thisIsLove=input()if thisIsLove:print 再转身就该勇敢留下来,num=10print Guess what I think?answer=input()if answernum:print too big!if answer=num:print BINGO!,8 while,同if一样,while也是一种控制流语句,另外它也被称作循环语句。程序执行到while处,“当”条件为True时,就去执行while内部的代码,“当”条件为False时,就跳过。语法为:while 条件:循环执行的语句同if一样,注意冒号,注意缩进。,9 random,之前我们用了很多次的print和input方法,它们的作用是实现控制台的输入和输出。除此之外,python还提供了很多模块,用来实现各种常见的功能,比如时间处理、科学计算、网络请求、随机数等等等等。今天我就来说说,如何用python自带的随机数模块。,引入模块的方法:from 模块名 import 方法名from random import randint之后你就可以用randint来产生随机数了。randint(5,10)这样将会产生一个5到10之间(包括5和10)的随机整数。answer=randint(1,100)程序在运行时候,会产生一个1到100的随机整数,存在answer里。,10 for循环,for.in.for i in range(1,101):print i解释一下,range(1,101)表示从1开始,到101为止(不包括101),取其中所有的整数。for i in range(1,101)就是说,把这些数,依次赋值给变量i。相当于一个一个循环过去,第一次i=1,第二次i=2,直到i=100。当i=101时跳出循环。,11 字符串,python中最常用的字符串表示方式是单引号()和双引号()。可以直接输出一个字符串,也可以用一个变量来保存字符串,然后输出python中还有一种表示字符串的方法:三个引号()或者()字符串中表示引号也可以用,可以不受引号的限制(转义字符),表示单引号,“表示双引号Im a”good“teacher被称作转译字符,除了用来表示引号,还有比如用表示字符串中的n表示字符串中的换行还有个用处,就是用来在代码中换行,而不影响输出的结果:this is thesame line,作业,作业:用print输出以下文字:1.He said,Im yours!”2._v_/3.Stay hungry,stay foolish.-Steve Jobs4.*,12 字符串格式化,输出字符串的时候,如果想对输出的内容进行一些整理,比如把几段字符拼接起来,或者把一段字符插入到另一段字符中间,就需要用到字符串的格式化输出。把两段字符连起来输出 str1=good str2=bye print str1+str2,一个数字加到文字后面输出用str()把数字转换成字符串print My age is+str(18)或num=18print My age is+str(num)就是用%对字符串进行格式化num=18print My age is%d%num输出的时候,%d会被%后面的值替换。输出My age is 18,%d只能用来替换整数。格式化的数值是小数,要用%fprint Price is%f%4.99如果你想保留两位小数,需要在f前面加上条件:%.2fprint Price is%.2f%4.99可以用%s来替换一段字符串name=Crossinprint%s is a good teacher.%name,print Today is%s.%Friday注意区分:有引号的表示一段字符,没有引号的就是一个变量,这个变量可能是字符,也可能是数字,但一定要和%所表示的格式相一致。,设你现在有一组学生成绩的数据,你要输出这些数据。在一行中,既要输出学生的姓名,又要输出他的成绩。例如Mikes score is 87.print%ss score is%d%(Mike,87)name=Lilyscore=95print%ss score is%d%(name,score),无论你有多少个值需要代入字符串中进行格式化,只需要在字符串中的合适位置用对应格式的%表示,然后在后面的括号中按顺序提供代入的值就可以了。占位的%和括号中的值在数量上必须相等,类型也要匹配。,13 循环的嵌套,for i in range(0,5):for j in range(0,5):print i,j,14 类型转换,int(x)#把x转换成整数float(x)#把x转换成浮点数str(x)#把x转换成字符串bool(x)#把x转换成bool值,因为在python中,以下数值会被认为是False:为0的数字,包括0,0.0空字符串,包括,表示空值的None空集合,包括(),其他的值都认为是True。None是python中的一个特殊值,表示什么都没有,它和0、空字符、False、空集合都不一样。,15 函数,自己写一个函数,就需要去 定义 它。python里的关键字叫def(define的缩写),格式如下:def sayHello():print hello world!sayHello是这个函数的名字,后面的括号里是参数,这里没有,表示不需要参数。但括号和后面的冒号都不能少。下面缩进的代码块就是整个函数的内容,称作函数体。,def sayHello(someone):print someone+says Hello!def plus(num1,num2):print num1+num2def plus(num1,num2):return num1+num2,16 if,elif,else,if a=1:print oneelif a=2:print twoelif a=3:print threeelse:print too many,17 if的嵌套,if 条件1:if 条件2:语句1 else:语句2else:if 条件2:语句3 else:语句4,写一个判断点(x,y)在哪个坐标系的函数,18 list,列表,是用来处理一组有序项目的数据结构.print range(1,10)得到的结果是:1,2,3,4,5,6,7,8,9,列表中的元素也可以是别的类型,比如:l=meat,egg,fish,milk甚至是不同类型的混合:l=365,everyday,0.618,True,访问list中的元素list中的每个元素都对应一个递增的序号。与现实中习惯的序号不同在于,计算机中的计数通常都是从0开始,python也不例外。要访问l中的第1个元素365,只要用l0就可以了。依次类推,注意,你不能访问一个不存在的元素,比如l10,程序就会报错,提示你index越界了,修改list中的元素修改list中的某一个元素,只需要直接给那个元素赋值就可以了:l0=123,向list中添加元素list有一个append方法,可以增加元素。以l这个列表为例,调用的方法是:l.append(1024),删除list中的元素删除list中的某一个元素,要用到del:del l0输出l,得到everyday,0.618,True,1024。这时候再调用l0,会得到everyday,其他元素的序号也相应提前。,列表对+和*的操作符与字符串相似。+号用于组合列表,*号用于重复列表。1,2,3+4,5,6 1,2,3,4,5,6 Hi!*4 Hi!,Hi!,Hi!,Hi!,列表操作包含以下函数:1、cmp(list1,list2):比较两个列表的元素 2、len(list):列表元素个数 3、max(list):返回列表元素最大值 4、min(list):返回列表元素最小值 5、list(seq):将元组转换为列表,列表操作包含以下方法:1、list.append(obj):在列表末尾添加新的对象2、list.count(obj):统计某个元素在列表中出现的次数3、list.extend(seq):在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)4、list.index(obj):从列表中找出某个值第一个匹配项的索引位置5、list.insert(index,obj):将对象插入列表6、list.pop(obj=list-1):移除列表中的一个元素(默认最后一个元素),并且返回该元素的值7、list.remove(obj):移除列表中某个值的第一个匹配项8、list.reverse():反向列表中元素9、list.sort(func):对原列表进行排序,list有两类常用操作:索引(index)和切片(slice)l=365,everyday,0.618,True l-1 l1,切片操作符是在内提供一对可选数字,用:分割冒号前的数表示切片的开始位置,冒号后的数字表示切片到哪里结束l1:3 得到的结果是everyday,0.618,19 字符串的分割,字符串和list之间有很多不得不说的事。比如有同学想要用python去自动抓取某个网页上的下载链接,那就需要对网页的代码进行处理。处理的过程中,免不了要在字符串和list之间进行很多操作。,假设你现在拿到了一个英语句子,需要把这个句子中的每一个单词拿出来单独处理。sentence=I am an English sentencesentence.split()split()会把字符串按照其中的空格进行分割,分割后的每一段都是一个新的字符串,最终返回这些字符串组成一个list。于是得到I,am,an,Englist,sentence,除了空格外,split()同时也会按照换行符n,制表符t进行分割。split默认是按照空白字符进行分割.split还可以指定分割的符号.section=Hi.I am the one.Bye.通过指定分割符号为.,可以把每句话分开section.split(.)Hi,I am the one,Bye,aaa.split(a)将会得到,,由四个空串组成的list,20 连接list,Join和split正好相反:split是把一个字符串分割成很多字符串组成的list,而join则是把一个list中的所有字符串连接成一个字符串。join的格式有些奇怪,它不是list的方法,而是字符串的方法。首先你需要有一个字符串作为list中所有元素的连接符,然后再调用这个连接符的join方法,join的参数是被连接的list,s=;li=apple,pear,orangefruit=s.join(li)print fruit得到结果apple;pear;orange。从结果可以看到,分号把list中的几个字符串都连接了起来。,21 字符串的索引和切片,1.遍历通过for.in可以遍历字符串中的每一个字符。word=helloworldfor c in word:print c,2.索引访问通过加索引的方式,访问字符串中的某个字符。print word0print word-2与list不同的是,字符串不能通过索引访问去更改其中的字符。word1=a这样的赋值是错误的。,3.切片通过两个参数,截取一段子串,具体规则和list相同。print word5:7print word:-5print word:,22 元组,元组 与 list 一样,每个元素可以存储不同类型的数据。元组是“写保护”的,即元组创建后不能再做任何修改操作,元组通常代表一行数据,而元组中的元素代表不同的数据项。不能添加、删除、修改tuple_name=(1,A,”peng”),如果创建的元组只含有一个元素,也要加上逗号,比如Tuple_name=(“apple”,)对于 Tuple_name=(“apple”)python 无法区分变量Tuple_name是元组还是表达式,Python会误认为圆括号中的内容为表达式,因此tuple0输出的结果是a元组的引用:tuplen,元组还可以有其他元组组成,构成二元元组Tuples=(1,2),(3,4)元组打包:创建元组元组解包:把元组的各个元素付给多个变量tuple=(“apple”,”banana”,”orange”)a,b,c,d=tuple,元组的遍历:通过循环语句依此访问元组中各元素。需要用到两个函数 range(),len(),元组运算符,与字符串一样,元组之间可以使用+号和*号进行运算。这就意味着他们可以组合和复制,运算后会生成一个新的元组。,无关闭分隔符任意无符号的对象,以逗号隔开,默认为元组,如下实例:print abc,-4.24e93,18+6.6j,xyz;abc-4.24e+93(18+6.6j)xyz x,y=1,2;print Value of x,y:,x,y;Value of x,y:1 2,元组内置函数Python元组包含了以下内置函数,23 Python 字典(Dictionary),字典是另一种可变容器模型,且可存储任意类型对象,如其他容器模型。字典由键和对应值成对组成。字典也被称作关联数组或哈希表。字典的值通过键来引用,基本语法dict=Alice:2341,Beth:9102,Cecil:3258也可如此创建字典:dict1=abc:456;dict2=abc:123,98.6:37;每个键与值用冒号隔开(:),每对用逗号分割,整体放在花括号中()。键必须独一无二,但值则不必。值可以取任何数据类型,但必须是不可变的,如字符串,数或元组。,访问字典里的值,把相应的键放入熟悉的方括弧,如下实例:dict=Name:Zara,Age:7,Class:First;print dictName:,dictName;print dictAge:,dictAge;,如果用字典里没有的键访问数据,会输出错误如下:dict=Name:Zara,Age:7,Class:First;print dictAlice:,dictAlice;,修改字典向字典添加新内容的方法是增加新的键/值对,修改或删除已有键/值对如下实例:dict=Name:Zara,Age:7,Class:First;dictAge=8;dictSchool=DPS School;print dictAge:,dictAge;print dictSchool:,dictSchool;,删除字典元素能删单一的元素也能清空字典,清空只需一项操作。显示删除一个字典用del命令,如下实例:dict=Name:Zara,Age:7,Class:First;del dictName;#删除键是Name的条dict.clear();#清空词典所有条目del dict;#删除词典 用del后字典不再存在 print dictAge:,dictAge;print dictSchool:,dictSchool;,字典内置函数cmp(dict1,dict2)比较两个字典元素len(dict)计算字典元素个数,即键的总数str(dict)输出字典可打印的字符串表示type(variable)返回输入的变量类型,如果变量是字典就返回字典类型。,Python字典包含了以下内置方法:radiansdict.clear()删除字典内所有元素 radiansdict.copy()返回一个字典的浅复制radiansdict.fromkeys()创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值radiansdict.get(key,default=None)返回指定键的值,如果值不在字典中返回default值radiansdict.has_key(key)如果键在字典dict里返回true,否则返回false6radiansdict.items()以列表返回可遍历的(键,值)元组数组radiansdict.keys()以列表返回一个字典所有的键radiansdict.setdefault(key,default=None)和get()类似,但如果键不已经存在于字典中,将会添加键并将值设为defaultradiansdict.update(dict2)把字典dict2的键/值对更新到dict里10radiansdict.values()以列表返回字典中的所有值,24 Python 日期和时间,Python程序能用很多方式处理日期和时间。转换日期格式是一个常见事。Python有一个time and calendar模组可以帮忙。,Tick,时间间隔是以秒为单位的浮点小数。每个时间戳都以自从1970年1月1日午夜(历元)经过了多长时间来表示。Python附带的受欢迎的time模块下有很多函数可以转换常见日期格式。如函数time.time()用ticks计时单位返回从12:00am,January 1,1970(epoch)开始的记录的当前操作系统时间,如下实例:,import time;#This is required to include time module.ticks=time.time()print Number of ticks since 12:00am,January 1,1970:,ticks,时间元组 很多Python函数用一个元组装起来的9组数字处理时间:,上述也就是struct_time元组。这种结构具有如下属性:,获取格式化的时间根据需求选取各种格式,但是最简单的获取可读的时间模式的函数是asctime():import time;localtime=time.asctime(time.localtime(time.time()print Local current time:,localtime,获取当前时间从返回浮点数的时间辍方式向时间元组转换,只要将浮点数传递给如localtime之类的函数。import time;localtime11=time.localtime(time.time()print Local current time:,localtime11,获取某月日历Calendar模块有很广泛的方法用来处理年历和月历,例如打印某月的月历:import calendar cal=calendar.month(2008,1)print Here is the calendar:print cal;,