欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    程序设计思想与方法python讲义(第四至五章).ppt

    • 资源ID:6011243       资源大小:266.50KB        全文页数:93页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    程序设计思想与方法python讲义(第四至五章).ppt

    程序设计思想与方法45章,潘理,字符串处理,文本数据简单的字符串处理字符串的机内表示字符串和密码格式化输出文件处理,文本数据,计算机应用从科学计算转向信息管理.信息管理中大量的数据都是文本数据.如姓名,地址,简历等等计算机中用字符串来表示文本数据.,3,字符串类型,字符串:字符序列字符串字面值:用一对引号(单或双)标明.“hello world”!#$%&*“汉字也是字符”字符串中包含引号怎么办?包含单引号:串用双引号括住包含双引号:串用单引号括住两者都有:更一般的方法是串中用转义字符print“Alice said,“Hello,Bob”,Lu Chaojun,SJTU,4,字符串处理,文本数据简单的字符串处理字符串的机内表示字符串和密码格式化输出文件处理,字符串的输入,普通变量的输入num=input(“Enter a number:“)Enter a number:5.6变量num得到值 5.6如果用同样的方法输入字符串str=input(“Enter a string:“)Enter a string:JohnPython会输出出错信息原因:input()是把输入当成表达式来计算的!,Lu Chaojun,SJTU,6,字符串的正确输入,输入时加上引号str=input(“Enter a string:“)Enter a string:JohnEnter a string:“John”使用raw_input()str=raw_input(“Enter a string:“)Enter a string:John,input与raw_input,x=input()x=raw_input()“John”Johnx xJohn Johnx=input()x=raw_input()3*4+2 3*4+2x x14 3*4+2,Lu Chaojun,SJTU,8,字符串赋值,字符串可以直接赋值Str=abcdeStrabcde,取字符,字符串是字符序列,可通过位置索引访问每个字符.对长度为n的字符串,索引可以是大于0的数:自左向右为0 n1,或者是负数:自右向左为1,2,3,n 例如:若str=“Hello Bob”,则str0或str9是Hstr5或str4是 str8或str1是bstr9或str10越界出错,取子串,切段:取一个索引范围内的字符.:所取子串:位置索引从start end1start或/和end可省略,缺省值为串的首尾例如:若str=“Hello Bob”,则str0:3是Helstr5:9是 Bobstr:5即str0:5str5:即str5,9str:即str0:9,连接,两字符串的连接+例如:“Hello”+“Bob”得到“HelloBob”一个字符串的重复例如:3*“Hi”和“Hi”*3都得到“HiHiHi”串长度函数len(),编程实例:获得每个月份的缩写,在一个数据表里查找目标def main():months=“JanFebMarAprMayJunJulAugSepOctNovDec”n=input(“Enter month number(1-12):”)pos=(n-1)*3monthAbbr=monthspos:pos+3print“The month abbreviation is”,monthAbbr+”.”这是简单查找:利用位置规律来定位.若是月份全称怎么办?,字符串处理,文本数据简单的字符串处理字符串的机内表示字符串和密码格式化输出文件处理,字符串的机内表示,与数值一样,计算机内用二进制数表示每一个字符因此操作字符串本质上仍然是数值运算.表示字符的这个数值称为字符的编码.每个字符用什么编码?对这个问题的不同回答就导致了许多不同的字符编码系统例如:字符集只包含AZ,分别用126表示.“8 5 12 12 15”是什么意思?,编码标准,不同计算机若用不同编码体系,则彼此无法沟通。标准化ASCII:单字节编码只用到7位:0-12796个可打印字符,32个控制字符利用8位可扩充ASCII:0-255GB2312:两字节(6763个汉字)GB18030:最多四字节(70244个汉字)Unicode:最多四字节.,字符与编码,求给定字符的编码:ord()ord(a)可得97求给定编码的字符:chr()chr(97)可得a可见Python 2.7支持ASCII.支持中文编码吗?print“你好”,字符串处理,文本数据简单的字符串处理字符串的机内表示字符串和密码格式化输出文件处理,编码,编码:输出一串字符对应的内码def main():message=raw_input(Enter the message to encode:)for ch in message:print ord(ch),main()执行时Enter the message to encode:abcdef97 98 99 100 101 102,解码,输出一串数字对应的字符串称为解码import stringdef main():code=raw_input(Enter the code of message:)message=for numStr in string.split(code):num=eval(numStr)message=message+chr(num)print the decoded message is:,messagemain()运行时Enter the code of message:97 98 99 100the decoded message is:abcd,几个函数,字符串与数字的相互转换eval(字符串):将字符串转换成数字。例如:eval(“500”)返回500str(表达式):将数值当作字符串。例如str(3+4*5)string.split:string库中的函数,字符串库,Python提供的string库包含了很多有用的字符串处理函数例如split():将字符串拆分成子串string.split(“Hello string library!”)返回结果:Hello,string,library!string.split(“32,24,25,57”,”,”)返回结果:32,24,25,57,字符串库的常用函数,capitalize(s):使字符串s的首字母大写capwords(s):使字符串s中的每个单词首字母大写center(s,width),ljust(s,width),rjust(s,width):使s变成width宽度且居中/左对齐/右对齐count(s,sub):sub在s中出现次数find(s,sub),rfind(s,sub):在s中找sub的首次/末次出现join(seq):将串序列中的串合并成一个串,分隔符默认为空格lower(s),upper(s):将串变成小写/大写lstrip(s),rstrip(s):删除打头/收尾的空格replace(s,oldsub,newsub):在s中用新子串替换旧子串,字符串与密码,字符串在机内使用一个数字序列表示。如果不知道采用什么编码,只看这个数字序列是猜不出表示的是什么字符串。这就是一种加密机制,称为替换法。字符编码都是工业标准,不是为了保密目的,从编码到密码,密码:为了保密而对信息进行编码.加密是计算机的一个重要应用,凯撒密码(Caesar cipher),a-D、b-E、c-F、d-G、e-H s-V、z-C eg.明文:access control 可变为:DFFHVV FRQWURO,字符串处理,文本数据简单的字符串处理字符串的机内表示字符串和密码格式化输出文件处理,格式化输出,格式化运算符%语法%()语义:模板串中用%标记“空位”,输出时用实际值填入.例如print“The price is$%0.2f”%(100)The price is$100.00,格式描述,%.三种类型字符:decimal,float,string宽度:用多少位置显示数值.省略或指定为0:根据值的实际长度显示.宽度超出值的长度时:右对齐显示宽度前加负号:左对齐.对浮点数用超长宽度会怎样?试试精度:指示浮点数值的小数位数.省略:按系统默认的小数位数显示.print“%f”%(math.pi),浮点数如何精确化?,浮点数的机内表示是近似值.银行应用要求精确表示金额,故不宜用浮点数及浮点运算.解决办法:以“分”为单位,用整数表示金额.设金额是x分,输出时利用x/100和x%100分别得到“元”和“角分”.print“You have%d.%02d”%(x/100,x%100)02d:不足2位用0填充:语句换行继续,字符串处理,文本数据简单的字符串处理字符串的机内表示字符串和密码格式化输出文件处理,文件处理,文件:存储在磁盘上的数据序列.典型的文件结构:基本数据项:可为任何类型若干数据项构成记录若干记录构成文件例如:学生基本数据项:学号,姓名,年龄一个学生记录:学号,姓名,年龄文件:全体学生记录,Lu Chaojun,SJTU,32,文本文件,文件中是文本数据文本文件可视为存储在磁盘上的字符串.单行字符串多行字符串行尾(EOL):用特殊字符,如新行(newline)字符.Python用n表示新行字符,该字符在显示时被解释成新行字符.例:print“first linensecond line”,33,文件处理:打开文件,程序不能直接与外存储器交互信息,必须通过内存进行交流打开文件:将磁盘文件与一个程序变量关联,做好读写准备.=open(,):“r”或“w”例如infile=open(“myfile”,“r”)outfile=open(“myfile”,“w”)写打开时小心文件名!因为可能破坏现有文件,34,文件处理:读写文件,读文件:读出文件内容.read():将整个文件作为一个字符串读入.readline():读入一行.readlines():读入所有行点表示法:文件是对象!写文件:将新内容写入文件.write()若想写多行内容,需写入n,35,文件处理:关闭文件,关闭文件:取消文件变量与磁盘文件的关联.close()关闭文件时,系统会将内存中文件内容输出到磁盘.,Lu Chaojun,SJTU,36,将整个文件作为一个字符串,#file0.pydef main():infile=open(encode.py,r)str=infile.read()print str infile.close()main(),读入文件的前5行,#file1.pydef main():infile=open(encode.py,r)for i in range(5):str=infile.readline()print str infile.close()main(),读入某个文件的所有行,#file3.pydef main():infile=open(encode.py,r)for line in infile.readlines():print line infile.close()main(),39,END,面向对象与图形编程,面向对象的思想图形化编程图形对象的使用未知值的图形化处理坐标系的选择图形交互图形模块介绍,42,42,42,数据与操作:传统观点,数据类型某种值的集合运算(操作)的集合计算就是对数据进行操作数据与操作分离数据是被动的,操作是主动的例如:string类型的值是abc等,对串的操作有+,*,len()等,43,43,数据与操作:面向对象观点,对象(Object):集数据与操作于一身.对象知道一些信息对象能对那些信息进行处理计算:向对象发出请求操作的消息.主动的数据类型面向对象(Object-Oriented):软件系统由各种对象组成,对象之间通过消息进行交互.现代软件系统几乎都是OO设计和实现.,44,44,44,OO基本概念,类(class):描述同类对象的共性包含的数据:任何类型的数据,甚至可以是对其他对象的引用.能执行的操作(方法)对象(object):类的实例(instance)同类的不同对象可有不同的数据值(实例变量),但能执行的操作是一样的创建对象:使用类的构造器(constructor)初始化对象(,,)消息:请求对象执行它的方法.(,,),对象的方法,不同类型的对象当然提供不同的操作对象一般都提供读取它的实例变量值的方法,统称为accessor。例如Point对象的getX()和getY(),Line对象的getP1()和getP2()。对象一般也提供修改其实例变量的方法,统称为mutator。例如所有图形对象都有move(dx,dy)方法。,45,面向对象与图形编程,面向对象的思想图形化编程图形对象的使用未知值的图形化处理坐标系的选择图形交互图形模块介绍,图形界面,命令行界面通过输入一个个命令名字让计算机去做某项特定的工作。如DOS系统。使用复杂,需要记住一个个命令。图形用户界面(GUI)利用窗口、图标、按钮和菜单等方式驱动程序的执行。如window系统。使用方便,图形编程框架,现代编程语言大都提供图形化变成的工具Python有自带的Tkinter本书作者写的图形库:graphics.py放入文件夹:Python26Libsite_packagesimport graphics或 from graphics import*后者可使引用库函数更方便,48,面向对象与图形编程,面向对象的思想图形化编程图形对象的使用未知值的图形化处理坐标系的选择图形交互图形模块介绍,创建和关闭窗口,图形窗口:画图的地方创建一个窗口对象用import graphicswin=graphics.GraphWin()win=graphics.GraphWin(窗口的名字,行像素数,列像素数)用from graphics import*win=GraphWin()win=GraphWin(窗口的名字,行像素数,列像素数)关闭窗口:win.close(),50,图的内部表示,数字图像的表示:用像素(pixel)表示,像素越多,质量越好。黑白图像的像素需要一个bit表示。如1表示白,0表示黑。如需要表示灰度和彩色,则需要多于1个bit。每个像素占用的bit越多,图像质量越好。分辨率:图象中的像素数。图形库创建的窗口默认的分辨率是200*200,图形对象的操作,小测验:窗口中有哪几类对象?创建一个对象各类对象的公共操作将对象显示在窗口中:draw移动对象:move设置对象的填充颜色:setFill设置对象的边界颜色:setOutline,点,点:图形窗口的一个像素,位置用坐标(x,y)表示。坐标系统原点(0,0):左上角x轴:自左向右y轴:自顶向下小测试:默认大小的图形窗口,右下角坐标是?,53,点(续),创建Point类的对象Point(,)例:p=Point(50,60)对Point对象的操作求坐标:p.getX(),p.getY()在窗口中画自己:p.draw(win)设置点的颜色:p.setOutline(red)移动点:p.move(dx,dy),54,线段,创建 Line 类的对象Line(,)例如l=Line(Point(0,0),Point(100,100)对 Line 对象的操作在窗口中画自己l.draw(win),55,圆形,创建Circle类的对象Circle(,)例如c=Circle(Point(50,50),40)对Circle对象的操作填充颜色c.setFill(red)在窗口中画自己c.draw(win),56,椭圆,给定一个矩形框,创建一个内切Oval类的对象Oval(,)例如o=Oval(Point(20,150),Point(180,199)对Oval对象的操作在窗口中画自己o.draw(win),57,矩形,创建Rectangle类的对象Rectangle(,)例如r=Rectangle(Point(5,8),Point(30,40)对Rectangle对象的操作在窗口中画自己r.draw(win),58,多边形,创建Polygon类的对象Polygon(,)例如p=Polygon(Point(10,10),Point(30,30),Point(10,30)对Polygon对象的操作在窗口中画自己p.draw(win),59,文本,创建Text类的对象t=Text(,)例如t=Text(Point(99,99),”text here”)对Text对象的操作在窗口中画自己t.draw(win)重设字符串t.setText(“new text”),60,实例:画两只眼睛,方法一:直接创建两个对象leftEye=Circle(Point(80,50),5)leftEye.setFill(yellow)leftEye.setOutline(red)rightEye=Circle(Point(20,50),5)rightEye.setFill(yellow)rightEye.setOutline(red),61,利用对象复制,错误代码leftEye=Circle(Point(80,50),5)leftEye.setFill(yellow)leftEye.setOutline(red)rightEye=leftEyerightEye.move(20,50)Python中图像对象的赋值是为对象取一个别名,而不是创建一个新对象!,正确代码,leftEye=Circle(Point(80,50),5)leftEye.setFill(yellow)leftEye.setOutline(red)rightEye=Circle(Point(100,50),5)rightEye.setFill(yellow)rightEye.setOutline(red),更美观的代码,使用clone()复制对象leftEye=Circle(Point(80,50),5)leftEye.setFill(yellow)leftEye.setOutline(red)rightEye=leftEye.clone()rightEye.move(20,0),64,面向对象与图形编程,面向对象的思想图形化编程图形对象的使用未知值的图形化处理坐标系的选择图形交互图形模块介绍,编程实例:投资收益柱状图,用柱状图表示10年的投资收益.每年的收益是一个矩形。这些矩形有相同的宽度,但有不同的高度,66,算法,输入本金和年利率创建图形窗口确定比例:1原先对应的高度,每一年占用的宽度窗口左边画上刻度0号位置画对应初始本金的矩形,高度为本金值对接下来的1到10年:高度principal=principal*(1+apr)在相应位置画对应本利的矩形,进一步细化,确定图形窗口的尺寸:如果我们的显示器用的分辨率是1024*768,我们希望图形占四分之一的画面,则可以把分辨率定为512*384创建一个相应的窗口创建512*384的图形窗口,标题为Investment Growth ChartPython代码win=GraphWin(Investment Growth Chart,512,384),68,进一步细化(续),确定刻度的内容和位置内容:0.0K,2.5K,5.0K,7.5K,10.0K位置:确定水平方向30像素为一年,从第80像素开始;垂直方向5个刻度($10,000)平分300像素,即70像素为一档.算法精化Draw label 0.0K at(20,320)Draw label 2.5K at(20,250)Draw label 5.0K at(20,180)Draw label 7.5K at(20,110)Draw label 10.0K at(20,40)用Text函数实现,69,进一步细化(续),确定0号柱子的位置和高度位置:左下角坐标为(20,320)高度:principal*(280/10000),即右上角y坐标为320 principal*(280/10000).宽度:故右上角x坐标为20+30=50算法精化0号柱:从(20,320)到(50,320-principal*0.028)画矩形,70,进一步细化(续),其他柱子的位置和高度位置:左下角为(x,320).高度:principal*(280/10000),则右上角y坐标为320 principal*(280/10000).宽度:30,故右上角x坐标为(左下角x坐标+30)算法精化for year 从1到10:principal=principal*(1+apr)x=25*year+40height=principal*0.02从(x,230)到(x+25,230-height)画矩形,71,最后的程序(graph),from graphics import*def main():win=GraphWin(Investment Growth Chart,512,384)Text(Point(20,320),0.0K).draw(win)Text(Point(20,250),2.5K).draw(win)Text(Point(20,180),5.0K).draw(win)Text(Point(20,110),7.5K).draw(win)Text(Point(20,40),10.0K).draw(win)principal=input(enter initial principal:)apr=input(enter interest rate:),bar=Rectangle(Point(70,320),Point(100,320-principal*0.028)bar.setFill(green)bar.draw(win)x=100 for year in range(1,11):principal=principal*(1+apr)bar=Rectangle(Point(x,320),Point(x+30,320-principal*0.028)bar.setFill(green)bar.draw(win)x=x+30 raw_input(press any key to quit:)win.close()main(),面向对象与图形编程,面向对象的思想图形化编程图形对象的使用未知值的图形化处理坐标系的选择图形交互图形模块介绍,自定义坐标系,默认坐标系以像素为单位,编程很麻烦.坐标变换:实际数据需映射成窗口像素位置.Graphics模块提供自定义坐标系的功能,使坐标变换自动完成.好处编程简单直观改变窗口像素尺寸对程序几乎没影响,75,自定义坐标系,setCoords(左下角的新坐标,左下角的y坐标,右上角的x坐标,右上角的y坐标)Python自动进行新坐标系和像素之间的转换,例子:坐标系变换,例如win=GraphWin(“Tic-Tac-Toe”)win.setCoords(0.0,0.0,3.0,3.0)Line(Point(1,0),Point(1,3).draw(win)Line(Point(2,0),Point(2,3).draw(win)Line(Point(0,1),Point(3,1).draw(win)Line(Point(0,2),Point(3,2).draw(win)新坐标系为:左下角(0,0),右上角(3,3)系统自动把新坐标变换成200*200像素坐标编程实例:柱状图的改进(graph1),Lu Chaojun,SJTU,77,graph1,将x坐标分为13份,从0到13将y坐标分成6份,从0到6X坐标1-2是当年信息,2-3是一年后的信息,以此类推Y坐标1是0元,2是2.5K元,3是5K元,,from graphics import*def main():win=GraphWin(Investment Growth Chart,512,384)win.setCoords(0.0,0.0,13.0,6.0)Text(Point(0.5,1),0.0K).draw(win)Text(Point(0.5,2),2.5K).draw(win)Text(Point(0.5,3),5.0K).draw(win)Text(Point(0.5,4),7.5K).draw(win)Text(Point(0.5,5),10.0K).draw(win)principal=input(enter initial principal:)apr=input(enter interest rate:)bar=Rectangle(Point(1,1),Point(2,1+principal*0.0004)bar.setFill(green)bar.draw(win)for year in range(1,11):principal=principal*(1+apr)bar=Rectangle(Point(year+1,1),Point(year+2,1+principal*0.0004)bar.setFill(green)bar.draw(win)raw_input(press any key to quit:)win.close()main(),面向对象与图形编程,面向对象的思想图形化编程图形对象的使用未知值的图形化处理坐标系的选择图形交互图形模块介绍,图形交互界面,GUI:图形元素用于输入输出事件:移动鼠标,点击按钮,选菜单等.也是对象事件发生后,有相应事件处理程序来处理.事件驱动的编程捕获事件处理事件:一段程序,81,捕获鼠标点击,GraphWin类有一个方法getMouse():调用时等待用户点击,并返回点击位置(是个Point对象).例如:win=GraphWin(Click Me!)for i in range(10):p=win.getMouse()print You clicked(%d,%d)%(p.getX(),p.getY(),82,编程实例:triangle.py,设计一个程序,用鼠标在窗口中任意点三个点,将这三个点连成一个三角形。,#Program:triangle.pyfrom graphics import*def main():win=GraphWin(Draw a Triangle)win.setCoords(0.0,0.0,10.0,10.0)message=Text(Point(5,0.5),Click on three points)message.draw(win)p1=win.getMouse()p1.draw(win)p2=win.getMouse()p2.draw(win)p3=win.getMouse()p3.draw(win)triangle=Polygon(p1,p2,p3)triangle.draw(win)message.setText(Click anywhere to quit.)win.getMouse()main(),84,图形窗口中的文本输入,Entry对象:提供一个可编辑文本的框Entry(,)方法:setText()和getText()等实例:温度转换GUI版关键语句input=Entry(Point(2,3),5)input.setText(“0.0”)input.draw(win)celsius=eval(input.getText(),85,温度转换GUI版,创建一个名为“华氏到摄氏转换”的窗口显示两个文本框:“华氏温度”和“摄氏温度”设置一个输入框,用于输入华氏温度计算摄氏温度显示摄氏温度输出提示,结束程序,#coding=gbk#Program:fToC.pyfrom graphics import*import stringdef main():win=GraphWin(u华氏到摄氏的转换,300,300)Text(Point(50,50),u华氏温度).draw(win)Text(Point(50,150),u摄氏温度).draw(win)input=Entry(Point(200,50),10)input.setText(“0.0)input.draw(win)output=Text(Point(200,150),)output.draw(win)win.getMouse()fahrenheit=eval(input.getText()celsius=5.0/9*(fahrenheit-32)Text(Point(200,150),str(celsius).draw(win)Text(Point(200,250),Click anywhere to quit.).draw(win)win.getMouse()win.close()main(),面向对象与图形编程,面向对象的思想图形化编程图形对象的使用未知值的图形化处理坐标系的选择图形交互图形模块介绍,图形模块介绍,graphWin对象图形对象Entry对象,graphWin对象,表示屏幕上的一个窗口创建窗口graphWin关闭窗口close获取点击鼠标的位置getMouse设置坐标系设置背景颜色,图形对象,图形对象有:Point、Line、Circle、Rectangle、Oval、Polygon、Text行为:创建对象、设置图形的位置、设置图形的填充颜色、设置图形的边界颜色等,Entry对象,可编辑的文本框行为:创建文本框设置文本框的内容获取文本框的内容,END,

    注意事项

    本文(程序设计思想与方法python讲义(第四至五章).ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开