中文课件4-5讲



《中文课件4-5讲》由会员分享,可在线阅读,更多相关《中文课件4-5讲(94页珍藏版)》请在装配图网上搜索。
1、,单击此处编辑母版标题样式,,单击此处编辑母版文本样式,,第二级,,《,程序设计思想与方法,》,hyweng@ -,*,程序设计思想与方法,4,~,5,章,,2,课件及有关资料,R,:,1234,字符串处理,文本数据,,简单的字符串处理,,字符串的机内表示,,字符串和密码,,格式化输出,,文件处理,,,,,,,文本数据,计算机应用从科学计算转向信息管理,.,,信息管理中大量的数据都是文本数据,.,,如姓名,地址,简历等等,,计算机中用字符串来表示文本数据,.,4,字符串类型,字符串,:,字符序列,,字符串字面值,:,用一对引号,(,单或双,),标明,.,,“hello world”,,‘~!@
2、#$%^&*’,,“,汉字也是字符”,,字符串中包含引号怎么办,?,,包含单引号,:,串用双引号括住,,包含双引号,:,串用单引号括住,,两者都有,:,更一般的方法是串中用转义字符,\,,print “Alice said, \“Hello, ’Bob’\””,Lu Chaojun, SJTU,5,字符串处理,文本数据,,简单的字符串处理,,字符串的机内表示,,字符串和密码,,格式化输出,,文件处理,,,,,,,字符串的输入,普通变量的输入,,>>>num,= input(“Enter a number: “),,Enter a number : 5.6,,变量,num,得到值,5.6,,如果
3、用同样的方法输入字符串,,>>>,str = input(“Enter a string: “),,Enter a string: John,,Python,会输出出错信息,,原因,:,input(),是把输入当成表达式来计算的,!,Lu Chaojun, SJTU,7,字符串的正确输入,输入时加上引号,,>>>,str = input(“Enter a string: “),,Enter a string: ‘John’,,Enter a string: “John”,,使用,raw_input(),,str = raw_input(“Enter a string: “),,Enter a
4、string: John,input,与,raw_input,>>>x = input() >>>x = raw_input(),,“John” John,,>>>x >>>x,,‘John’ ‘John’,,>>>x = input() >>>x = raw_input(),,3*4+2 3*4+2,,>>>x >>>x,,14 3*4+2,Lu Chaojun, SJTU,9,字符串
5、赋值,字符串可以直接赋值,,>>>Str = ‘abcde’,,>>>Str,,‘abcde’,取字符,字符串是字符序列,,,可通过位置索引访问每个字符,.,,[],,对长度为,n,的字符串,,,索引可以,,是大于,0,的数,:,自左向右为,0 ~,n,1,,或者,,是负数,:,自右向左为,,1, 2, 3,…, ,n,,,例如,:,若,str = “Hello Bob”,,则,,str[0],或,str[,9,],是‘,H’,,str[5],或,str[,4,],是‘ ’,,str[8],或,str[,1,],是‘,b’,,str[9],或,str[,10,],越界出错,取
6、子串,切段,:,取一个索引范围内的字符,.,,[:],,所取子串,:,位置索引从,start ~ end,1,,start,或,/,和,end,可省略,,,缺省值为串的首尾,,例如,:,若,str = “Hello Bob”,,则,,str[0:3],是‘,Hel’,,str[5:9],是‘,Bob’,,str[:5],即,str[0:5],,str[5:],即,str[5,9],,str[:],即,str[0:9],连接,两字符串的连接,, + ,,例如,:,,“Hello” + “Bob”,得到“,HelloBob”,,一个字符串的重复,,例如,:,,3*“Hi”,和“,Hi”*3,都得
7、到“,HiHiHi”,,串长度函数,len(),编程实例,:,获得每个月份的缩写,在一个数据表里查找目标,,def main():,,months=“JanFebMarAprMayJunJulAugSepOctNovDec”,,n = input(“Enter month number (1-12): ”),,pos = (n-1)*3,,monthAbbr = months[pos:pos+3],,print “The month abbreviation is”,monthAbbr+”.”,,,这是简单查找:利用位置规律来定位,.,,若是月份全称怎么办,?,字符串处理,文本数据,,简单的字
8、符串处理,,字符串的机内表示,,字符串和密码,,格式化输出,,文件处理,,,,,,,字符串的机内表示,与数值一样,,,计算机内用二进制数表示每一个字符,,因此操作字符串本质上仍然是数值运算,.,,表示字符的这个数值称为字符的编码,.,,每个字符用什么编码,?,,对这个问题的不同回答就导致了许多不同的字符编码系统,,例如,:,字符集只包含,A~Z,,分别用,1~26,表示,.,,“8 5 12 12 15”,是什么意思,?,编码标准,不同计算机若用不同编码体系,则彼此无法沟通。,,标准化,,ASCII,:单字节编码,,只用到,7,位,: 0 - 127,,96,个可打印字符,,32,个控制字符,
9、,利用,8,位可扩充,ASCII: 0 - 255,,GB2312,:两字节,(6763,个汉字,),,GB18030,:最多四字节,(70244,个汉字,),,Unicode,:最多四字节,.,字符与编码,求给定字符的编码,: ord(),,ord(‘a’),可得,97,,求给定编码的字符,:chr(),,chr(97),可得,‘,a’,,可见,Python 2.7,支持,ASCII.,,支持中文编码吗,?,,>>>print “,你好”,字符串处理,文本数据,,简单的字符串处理,,字符串的机内表示,,字符串和密码,,格式化输出,,文件处理,,,,,,,编码,编码:输出一串字符对应的内码,,
10、def main():,,message=raw_input("Enter the message to encode:"),,for ch in message:,,print ord(ch),,,,main(),,执行时,,Enter the message to encode,:,abcdef,,97 98 99 100 101 102,解码,输出一串数字对应的字符串称为解码,,import string,,def main():,,code = raw_input("Enter the code of message: "),,message = "",,for numStr in s
11、tring.split(code):,,num = eval(numStr),,message = message + chr(num),,print "the decoded message is:", message,,,main(),,运行时,,Enter the code of message,:,97 98 99 100,,the decoded message is,:,abcd,几个函数,字符串与数字的相互转换,,eval,(字符串):将字符串转换成数字。例如:,eval(“500”),返回,500,,str(,表达式,) :,将数值当作字符串。例如,str(3+4*5),,st
12、ring.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,中的每个单词首字母大
13、写,,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
14、):,在,s,中用新子串替换旧子串,字符串与密码,字符串在机内使用一个数字序列表示。如果不知道采用什么编码,只看这个数字序列是猜不出表示的是什么字符串。这就是一种加密机制,称为替换法。,,字符编码都是工业标准,,,不是为了保密目的,从编码到密码,密码,:,为了保密而对信息进行编码,.,,,,,加密是计算机的一个重要应用,,明文,密文,加密,解密,凯撒密码(,Caesar cipher,),a-D,、,b-E,、,c-F,、,d-G,、,e-H … … s-V … …,、,z-C,,eg.,明文:,access control,,可变为:,DFFHVV FRQWURO,,字符串处理,文本数据,,
15、简单的字符串处理,,字符串的机内表示,,字符串和密码,,格式化输出,,文件处理,,,,,,,格式化输出,格式化运算符,%,,语法,, % (),,语义,:,模板串中用,%,标记“空位”,输出时用实际值填入,.,,例如,,print “The price is $,%0.2f,” % (100),,The price is $100.00,格式描述,%.,,三种类型字符,:,d,ecimal,,f,loat,,s,tring,,宽度,:,用多少位置显示数值,.,,省略或指定为,0:,根据值的实际长度显示,.,,宽度超出值的长度时,:,右对齐显示,,宽度前加负号,:,左对齐,.,,对浮点数用超长宽
16、度会怎样,?,试试,…,,精度,:,指示浮点数值的小数位数,.,,省略,:,按系统默认的小数位数显示,.,,print “%f” % (math.pi),浮点数如何精确化,?,浮点数的机内表示是近似值,.,,银行应用要求精确表示金额,,,故不宜用浮点数及浮点运算,.,,解决办法,:,以“分”为单位,,,用整数表示金额,.,,设金额是,x,分,,,输出时利用,x/100,和,x%100,分别得到“元”和“角分”,.,,print “You have %d.%02d” % \,,(x/100, x%100),,02d:,不足,2,位用,0,填充,,\:,语句换行继续,字符串处理,文本数据,,简单的
17、字符串处理,,字符串的机内表示,,字符串和密码,,格式化输出,,文件处理,,,,,,,文件处理,文件,:,存储在磁盘上的数据序列,.,,典型的文件结构,:,,基本数据项,:,可为任何类型,,若干数据项构成记录,,若干记录构成文件,,例如,:,,学生基本数据项,:,学号,,,姓名,,,年龄,,一个学生记录,:{,学号,,,姓名,,,年龄,},,文件,:,全体学生记录,Lu Chaojun, SJTU,33,文本文件,文件中是文本数据,,文本文件可视为存储在磁盘上的字符串,.,,单行字符串,,多行字符串,,行尾,(EOL):,用特殊字符,,,如新行,(newline),字符,.,,Python,用
18、,\n,表示新行字符,,,该字符在显示时被解释成新行字符,.,,例,:,,print “first line,\n,second line”,34,文件处理,:,打开文件,程序不能直接与外存储器交互信息,必须通过内存进行交流,,打开文件,:,将磁盘文件与一个程序变量关联,,,做好读写准备,.,, = open(,),,,: “r”,或“,w”,,例如,,infile = open(“myfile”, “r”),,outfile = open(“myfile”, “w”),,写打开时小心文件名,!,因为可能破坏现有文件,35,文件处理,:,读写文件,读文件,:,读出文件内容,,.read(),:
19、将整个文件作为一个字符串读入,,.readline(),:读入一行,,.readlines(),:读入所有行,,点表示法,:,文件是对象,!,,写文件,:,将新内容写入文件,.,,.write(),,若想写多行内容,,,需写入,\n,36,文件处理,:,关闭文件,关闭文件,:,取消文件变量与磁盘文件的关联,.,,.close(),,关闭文件时,,,系统会将内存中文件内容输出到磁盘,.,Lu Chaojun, SJTU,37,将整个文件作为一个字符串,# file0.py,,,def main():,,infile = open("encode.py", 'r'),,str = infile.r
20、ead(),,print str,,infile.close(),,,main(),读入文件的前,5,行,# file1.py,,,def main():,,infile = open("encode.py", 'r'),,for i in range(5):,,str = infile.readline(),,print str,,infile.close(),,,main(),读入某个文件的所有行,# file3.py,,def main():,,infile = open("encode.py", 'r'),,for line in infile.readlines():,,print
21、 line,,infile.close(),,,main(),40,END,面向对象与图形编程,面向对象的思想,,图形化编程,,图形对象的使用,,未知值的图形化处理,,坐标系的选择,,图形交互,,图形模块介绍,,,,,,,,43,43,43,数据与操作,:,传统观点,数据类型,,某种值的集合,,运算,(,操作,),的集合,,计算就是对数据进行操作,,数据与操作分离,,数据是被动的,,,操作是主动的,,例如,:string,类型的值是,’,abc’,等,,,对串的操作有,+,,,*,,,len(),等,44,44,数据与操作,:,面向对象观点,对象,(,Object,):,集数据与操作于一身,.
22、,,对象知道一些信息,,对象能对那些信息进行处理,,计算,:,向对象发出请求操作的消息,.,,主动的数据类型,,面向对象,(,Object-Oriented,):,软件系统由各种对象组成,,,对象之间通过消息进行交互,.,,现代软件系统几乎都是,OO,设计和实现,.,45,45,45,OO,基本概念,类,(,class,),:描述同类对象的共性,,包含的数据:,任何类型的数据,,,甚至可以是对其他对象的引用,.,,能执行的操作,(,方法,),,对象,(,object,),:类的,实例,(,instance,),,同类的不同对象可有不同的数据值,(,实例变量,),,但能执行的操作是一样的,,创建
23、对象:使用类的,构造器,(,constructor,),初始化对象,,<,类名,>(<,参数,1>,,,<,参数,2>,…),,消息:请求对象执行它的方法,,<,对象,>.<,方法名,>(<,参数,1>,,,<,参数,2>,…),对象的方法,不同类型的对象当然提供不同的操作,,对象一般都提供读取它的实例变量值的方法,统称为,accessor,。,,例如,Point,对象的,getX(),和,getY(),,,Line,对象的,getP1(),和,getP2(),。,,对象一般也提供修改其实例变量的方法,,,统称为,mutator,。,,例如所有图形对象都有,move(dx,,,dy),方法。,
24、46,面向对象与图形编程,面向对象的思想,,图形化编程,,图形对象的使用,,未知值的图形化处理,,坐标系的选择,,图形交互,,图形模块介绍,,,,,,,,图形界面,命令行界面,,通过输入一个个命令名字让计算机去做某项特定的工作。如,DOS,系统。,,使用复杂,需要记住一个个命令。,,图形用户界面,(GUI),,利用窗口、图标、按钮和菜单等方式驱动程序的执行。如,window,系统。,,使用方便,图形编程框架,现代编程语言大都提供图形化变成的工具,,Python,有自带的,Tkinter,,本书作者写的图形库:,graphics.py,,放入文件夹:,Python26\Lib\site_pack
25、ages,,import graphics,或,,,from graphics import *,,后者可使引用库函数更方便,49,面向对象与图形编程,面向对象的思想,,图形化编程,,图形对象的使用,,未知值的图形化处理,,坐标系的选择,,图形交互,,图形模块介绍,,,,,,,,创建和关闭窗口,图形窗口,:,画图的地方,,创建一个窗口对象,,用,import graphics,,win = graphics.GraphWin(),,win = graphics.GraphWin(‘,窗口的名字’,行像素数,列像素数,),,用,from graphics import *,,win = Grap
26、hWin(),,win = GraphWin (‘,窗口的名字’ ,行像素数,列像素数,),,关闭窗口:,win.close(),51,图的内部表示,数字图像的表示:用像素,(pixel),表示,像素越多,质量越好。黑白图像的像素需要一个,bit,表示。如,1,表示白,,0,表示黑。如需要表示灰度和彩色,则需要多于,1,个,bit,。每个像素占用的,bit,越多,图像质量越好。,,分辨率:图象中的像素数。图形库创建的窗口默认的分辨率是,200*200,图形对象的操作,小测验:窗口中有哪几类对象?,,创建一个对象,,各类对象的公共操作,,将对象显示在窗口中:,draw,,移动对象:,move,,
27、设置对象的填充颜色:,setFill,,设置对象的边界颜色:,setOutline,点,点:图形窗口的一个像素,位置用坐标,(,x,,,y),表示。,,坐标系统,,原点,(0,,,0),:左上角,,x,轴:自左向右,,y,轴:自顶向下,,小测试:默认大小的图形窗口,右下角坐标是,?,54,点(,续),创建,Point,类的对象,,Point(<,x,坐标,>,<,y,坐标,>),,例,:,p = Point(50,60),,对,Point,对象的操作,,求坐标:,p.getX(), p.getY(),,在窗口中画自己:,p.draw(win),,设置点的颜色:,p.setOutline(‘re
28、d’),,移动点:,p.move(dx, dy),55,线段,创建,Line,类的对象,,Line(<,端点,1>,<,端点,2>),,例如,,l = Line(Point(0,0),Point(100,100)),,对,Line,对象的操作,,在窗口中画自己,,l.draw(win),56,圆形,创建,Circle,类的对象,,Circle(<,圆心,>,<,半径,>),,例如,,c = Circle(Point(50,50),40),,对,Circle,对象的操作,,填充颜色,,c.setFill(‘red’),,在窗口中画自己,,c.draw(win),57,椭圆,给定一个矩形框,创建一
29、个内切,Oval,类的对象,,Oval(<,限定框左上角,>,<,限定框右下角,>),,例如,,o = Oval(Point(20,150),Point(180,199)),,对,Oval,对象的操作,,在窗口中画自己,,o.draw(win),58,矩形,创建,Rectangle,类的对象,,Rectangle(<,左上角,>,<,右下角,>),,例如,,r = Rectangle(Point(5,8),Point(30,40)),,对,Rectangle,对象的操作,,在窗口中画自己,,r.draw(win),59,多边形,创建,Polygon,类的对象,,Polygon(<,顶点,1>,
30、<,顶点,2>,<,顶点,3>,…),,例如,,p = Polygon(Point(10,10), Point(30,30),Point(10,30)),,对,Polygon,对象的操作,,在窗口中画自己,,p.draw(win),60,文本,创建,Text,类的对象,,t = Text(<,中心位置点,>,<,字符串,>),,例如,,t = Text(Point(99,99),”text here”),,对,Text,对象的操作,,在窗口中画自己,,t.draw(win),,重设字符串,,t.setText(“new text”),61,实例:画两只眼睛,方法一:直接创建两个对象,,left
31、Eye = Circle(Point(80,50),5),,leftEye.setFill(‘yellow’),,leftEye.setOutline(‘red’),,rightEye = Circle(Point(20,50),5),,rightEye.setFill(‘yellow’),,rightEye.setOutline(‘red’),62,利用对象复制,错误代码,,leftEye = Circle(Point(80,50),5),,leftEye.setFill(‘yellow’),,leftEye.setOutline(‘red’),,rightEye = leftEye,,ri
32、ghtEye.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),,
33、leftEye.setFill(‘yellow’),,leftEye.setOutline(‘red’),,rightEye = leftEye.clone(),,rightEye.move(20,0),65,面向对象与图形编程,面向对象的思想,,图形化编程,,图形对象的使用,,未知值的图形化处理,,坐标系的选择,,图形交互,,图形模块介绍,,,,,,,,编程实例,:,投资收益柱状图,用柱状图表示,10,年的投资收益,.,,,,,,,每年的收益是一个矩形。这些矩形有相同的宽度,但有不同的高度,67,算法,输入本金和年利率,,创建图形窗口,,确定比例:,1,原先对应的高度,每一年占用的宽度,,窗
34、口左边画上刻度,,0,号位置画对应初始本金的矩形,高度为本金值,,对接下来的,1,到,10,年,:,,,高度,principal = principal * (1 + apr),,,在相应位置画对应本利的矩形,进一步细化,确定图形窗口的尺寸:如果我们的显示器用的分辨率是,1024*768,,我们希望图形占四分之一的画面,则可以把分辨率定为,512*384,,创建一个相应的窗口,,创建,512*384,的图形窗口,,,标题为‘‘,Investment Growth Chart’’,,Python,代码,,win = GraphWin("Investment Growth Chart", 512,
35、 384),69,进一步细化,(,续,),确定刻度的内容和位置,,内容,: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
36、"10.0K" at (20, 40),,用,Text,函数实现,70,进一步细化,(,续,),确定,0,号柱子的位置和高度,,位置,:,左下角坐标为,(20,,,320),,高度,:,principal * (280 / 10000),,即右上角,y,坐标为,320 – principal * (280 / 10000).,,宽度,:,故右上角,x,坐标为,20 + 30 = 50,,算法精化,,0,号柱,:,从,(20,320),到,(50,,320- principal*0.028,),画矩形,71,进一步细化,(,续,),其他柱子的位置和高度,,位置,:,左下角为,(x, 320).,
37、,高度,:,principal*(280/10000),,则右上角,y,坐标为,320,,principal*(280/10000).,,宽度,:,30,,故右上角,x,坐标为,(,左下角,x,坐标,+30),,算法精化,,for year,从,1,到,10:,,principal = principal * (1 + apr),,x = 25 * year + 40,,height = principal * 0.02,,,从,(x,230),到,(x + 25,230-height),画矩形,72,最后的程序(,graph,),from graphics import *,,def ma
38、in():,,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 pr
39、incipal:"),,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.s
40、etFill('green'),,bar.draw(win),,x = x + 30,,,raw_input("press any key to quit: "),,win.close(),,,main(),面向对象与图形编程,面向对象的思想,,图形化编程,,图形对象的使用,,未知值的图形化处理,,坐标系的选择,,图形交互,,图形模块介绍,,,,,,,,自定义坐标系,默认坐标系以像素为单位,,,编程很麻烦,.,,坐标变换,:,实际数据需映射成窗口像素位置,.,,Graphics,模块提供自定义坐标系的功能,,,使坐标变换自动完成,.,,好处,,编程简单直观,,改变窗口像素尺寸对程序几乎没影响,
41、76,自定义坐标系,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,
42、2), Point(3,2)).draw(win),,新坐标系为,:,左下角,(0,0),,右上角,(3,3),,系统自动把新坐标变换成,200*200,像素坐标,,编程实例,:,柱状图的改进(,graph1,),Lu Chaojun, SJTU,78,graph1,将,x,坐标分为,13,份,从,0,到,13,,将,y,坐标分成,6,份,从,0,到,6,,X,坐标,1-2,是当年信息,,2-3,是一年后的信息,以此类推,,Y,坐标,1,是,0,元,,2,是,2.5K,元,,3,是,5K,元,,……,from graphics import *,,def main():,,win = Grap
43、hWin("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
44、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)),,ba
45、r.setFill('green'),,bar.draw(win),,,raw_input("press any key to quit: "),,win.close(),,,main(),面向对象与图形编程,面向对象的思想,,图形化编程,,图形对象的使用,,未知值的图形化处理,,坐标系的选择,,图形交互,,图形模块介绍,,,,,,,,图形交互界面,GUI,:图形元素用于输入输出,,事件:移动鼠标,点击按钮,选菜单等,.,,也是对象,,事件发生后,,,有相应事件处理程序来处理,.,,事件驱动的编程,,捕获事件,,处理事件:一段程序,82,捕获鼠标点击,GraphWin,类有一个方法,getMo
46、use():,调用时等待用户点击,并返回点击位置,(,是个,Point,对象,).,,例如,:,,win = GraphWin("Click Me!"),,for i in range(10):,,p = win.getMouse(),,print "You clicked (%d, %d)" % (p.getX(), p.getY()),83,编程实例,:triangle.py,设计一个程序,用鼠标在窗口中任意点三个点,将这三个点连成一个三角形。,# Program: triangle.py,,from graphics import *,,def main():,,win = GraphW
47、in("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.se
48、tText("Click anywhere to quit."),,win.getMouse(),,,main(),85,图形窗口中的文本输入,Entry,对象,:,提供一个可编辑文本的框,,Entry(<,中心点,>,<,宽度,>),,方法:,setText(<,字符串,>),和,getText(),等,,实例,:,温度转换,GUI,版,,关键语句,,input = Entry(Point(2,3), 5),,input.setText(“0.0”),,input.draw(win),,celsius = eval(input.getText()),86,温度转换,GUI,版,创建一个名为“
49、华氏到摄氏转换”的窗口,,显示两个文本框:“华氏温度”和“摄氏温度”,,设置一个输入框,用于输入华氏温度,,计算摄氏温度,,显示摄氏温度,,输出提示,结束程序,# coding = gbk,,# Program: fToC.py,,,from graphics import *,,import string,,def main():,,win = GraphWin(u",华氏到摄氏的转换,", 300, 300),,Text(Point(50, 50), u",华氏温度,").draw(win),,Text(Point(50, 150), u",摄氏温度,").draw(win),,input
50、 = 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
51、 quit.").draw(win),,win.getMouse(),,win.close(),,,main(),面向对象与图形编程,面向对象的思想,,图形化编程,,图形对象的使用,,未知值的图形化处理,,坐标系的选择,,图形交互,,图形模块介绍,,,,,,,,图形模块介绍,graphWin,对象,,图形对象,,Entry,对象,graphWin,对象,表示屏幕上的一个窗口,,创建窗口,graphWin,,关闭窗口,close,,获取点击鼠标的位置,getMouse,,设置坐标系,,设置背景颜色,图形对象,图形对象有:,Point,、,Line,、,Circle,、,Rectangle,、,Oval,、,Polygon,、,Text,,行为:创建对象、设置图形的位置、设置图形的填充颜色、设置图形的边界颜色等,Entry,对象,可编辑的文本框,,行为:,,创建文本框,,设置文本框的内容,,获取文本框的内容,END,
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。