python课件Chapter11-ch

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

数据集合222数据集合体•很多程序都需要处理大量类似数据的集合.–文档中的大量单词,–学校学生,企业客户,–实验得到的数据,......•回顾:输入一批数据求平均值的程序.–无需保存数据:用累积变量sum和count即可.–但:求中位数和标准差需要保存全部数据.•用很多独立变量保存?333列表•有没有一个对象能包含很多数据?Yes!–例如:range(5)=[0,1,2,3,4]–又如:string.split(Thisisit.)=['This','is','it']•列表(List):是一种数据集合体.–是数据项的有序序列–数据整体用一个名字表示•例如:seq=['a',2,Point(0,0)]–数据成员通过位置索引引用•例如:seq[2]444列表与字符串•回顾:Python字符串是字符序列,可通过索引引用串的组成部分.•列表与字符串的区别:–列表的成员可以是任何数据类型,而字符串中只能是字符;–列表的成员可修改,而字符串不能修改.列表与数组•很多编程语言提供数组(array)类型.•Python列表与数组的区别:–列表是动态的,而数组是定长的–列表元素可以是混合类型的,而数组元素是同类型的5666列表操作•类似字符串操作:–合并:seq+seq–重复:seq*int_expr–索引:seq[index_expr]–分段:seq[start:end]–长度:len(seq)–迭代:forvarinseq:...•删除列表成员:–delseq[start:end]7列表操作OperatorMeaningseq+seqConcatenationseq*int-exprRepetitionseq[]Indexinglen(seq)Lengthseq[:]Slicingforvarinseq:IterationexprinseqMembership(Boolean)•lst=[1,2,3,4]3inlstTrue列表操作例子•exprinseqlst=[1,2,3,4]3inlstTrue•forvarinseq:sum=0forxins:sum=sum+x•seq[]lst=[1,2,3,4]lst[3]4lst[3]=Hello“lst[1,2,3,'Hello']lst[2]=7lst[1,2,7,'Hello']•seq*int-exprzeroes=[0]*50列表操作(续)•专用于列表的方法:–追加:list.append(x)–排序:list.sort()–逆转:list.reverse()–查找x的索引:list.index(x)–在i处插入x:list.insert(i,x)–数x的个数:list.count(x)–删除x:list.remove(x)–按索引取出成员:list.pop(i)–隶属:xinlist910列表操作(续)例子lst=[3,1,4,1,5,9]lst.append(2)lst[3,1,4,1,5,9,2]lst.sort()lst[1,1,2,3,4,5,9]lst.reverse()lst[9,5,4,3,2,1,1]lst.index(4)2lst.insert(4,Hello)lst[9,5,4,3,'Hello',2,1,1]lst.count(1)2lst.remove(1)lst[9,5,4,3,'Hello',2,1]lst.pop(3)3lst[9,5,4,'Hello',2,1]编程实例:stats.py#stats.pyfrommathimportsqrtdefgetNumbers():#输入列表数据defmean(nums):#求均值defstdDev(nums,xbar):#求标准差defmedian(nums):#求中值defmain():data=getNumbers()xbar=mean(data)std=stdDev(data,xbar)med=median(data)print......if__name__==’__main__’:main()11编程实例:stats中的函数defgetNumbers():nums=[]#startwithanemptylist#sentinellooptogetnumbersxStr=raw_input(Enteranumber(Entertoquit))whilexStr!=:x=eval(xStr)nums.append(x)#addthisvaluetothelistxStr=raw_input(Enteranumber(Entertoquit))returnnumsdefmean(nums):sum=0.0fornuminnums:sum=sum+numreturnsum/len(nums)Pythoninput和raw_input的区别方差的公式•如:组数据的平均值是m•方差公式s^2=1/n[(x1-m)^2+(x2-m)^2+...+(xn-m)^2]•标准差是方差开方后的结果(即方差的算术平方根)编程实例:stats中的函数defstdDev(nums,xbar):sumDevSq=0.0fornuminnums:dev=num-xbarsumDevSq=sumDevSq+dev*devreturnsqrt(sumDevSq/(len(nums)-1))defmedian(nums):nums.sort()size=len(nums)midPos=size/2ifsize%2==0:median=(nums[midPos]+nums[midPos-1])/2.0else:median=nums[midPos]returnmedian列表与类结合使用•类:将一些数据与操作封装成对象•列表:将一些同类对象组合成集合体•两者的结合可以表示任意复杂的数据集合体!15编程实例:对象列表-gpa.pyclassStudent:def__init__(self,name,hours,qpoints):self.name=nameself.hours=float(hours)self.qpoints=float(qpoints)defgetName(self):returnself.namedefgetHours(self):returnself.hoursdefgetQPoints(self):returnself.qpointsdefgpa(self):returnself.qpoints/self.hours编程实例:对象列表-gpa.pydefmakeStudent(infoStr):name,hours,qpoints=string.split(infoStr,\t)returnStudent(name,hours,qpoints)defmain():filename=raw_input(Enternamethegradefile:)infile=open(filename,'r')best=makeStudent(infile.readline())forlineininfile:s=makeStudent(line)ifs.gpa()best.gpa():best=sinfile.close()printThebeststudentis:,best.getName()printhours:,best.getHours()printGPA:,best.gpa()if__name__=='__main__':main()18编程实例:对象列表-gpaSort.py#gpasort.py#AprogramtosortstudentinformationintoGPAorder.fromgpaimportStudent,makeStudentdefreadStudents(filename):infile=open(filename,'r')students=[]forlineininfile:students.append(makeStudent(line))infile.close()returnstudentsdefwriteStudents(students,filename):outfile=open(filename,'w')forsinstudents:print(s.getName(),s.getHours(),s.getQPoints(),sep=\t,file=outfile)outfile.close()编程实例:对象列表-gpaSort.pydefmain():print(ThisprogramsortsstudentgradeinformationbyGPA)filename=input(Enterthenameofthedatafile:)data=readStudents(filename)data.sort(Student.gpa)filename=input(Enteranamefortheoutputfile:)writeStudents(data,filename)print(Thedatahasbeenwrittento,filename)if__name__=='__main__':main()编程实例:改进DieView•将骰子的7个点构成一个列表.(原为7个独立变量)–好处:对整个列表进行操作时,代码变得简单,因为可以应用循环语句.如:forpipinself.pips:pip.setFill(self.background)foriin[0,3,6]:self.pips[i].setFill(self.foreground)–根据掷出的value决定点亮骰子哪些点:可以使用表驱动的写法(见下页)LuChaojun,SJTU20编程实例:改进DieView(续)forpipinself.pips:self.pip.setFill(self.background)ifvalue==1:on=[3]elifvalue==2:on=[0,6]elifvalue==3:on=[0,3,6]elifvalue==4:on=[0,2,4,6]elifvalue==5:on=[0,2,3,4,6]else:on=[0,1,2,4,5,6]foriinon:self.pips[i].setFill(self.foreground)onTable=[[],[3],[2,4],[2,3,4],[0,2,4,6],[0,2,3,4,6],[0,1,2,4,5,6]]forpipinself.pips:self.pip.setFill(self.background)on=onTable[value]foriinon:self.pips[i].setFill(self.foreground)这个onTable是不变的,可以作为类的实例变量,由__init__初始化.DieView2.py21222222编程实例:计算器•程序=数据结构+算法–数据结构是“数据“的组织形式–算法是对数据结构的“操作”步骤–因此:程序本身可封装为对象!•编程实例:计算器.–每个计算器是一个对象.23编程实例:计算器-构建界面•首先,为计算机创建图形窗口:.def__init__(self):#createthewindowforthecalculatorwin=GraphWin(calculator)win.setCoords(0,0,6,7)win.setBackground(slategray)self.win=win24编程实例:计算器-构建界面•创建按钮列表:#c

1 / 30
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功