程序設(shè)計(jì)思想與方法python講義(第四至五章)課件_第1頁(yè)
程序設(shè)計(jì)思想與方法python講義(第四至五章)課件_第2頁(yè)
程序設(shè)計(jì)思想與方法python講義(第四至五章)課件_第3頁(yè)
程序設(shè)計(jì)思想與方法python講義(第四至五章)課件_第4頁(yè)
程序設(shè)計(jì)思想與方法python講義(第四至五章)課件_第5頁(yè)
已閱讀5頁(yè),還剩88頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、程序設(shè)計(jì)思想與方法45章潘理Email: panli字符串處理文本數(shù)據(jù)簡(jiǎn)單的字符串處理字符串的機(jī)內(nèi)表示字符串和密碼格式化輸出文件處理文本數(shù)據(jù)計(jì)算機(jī)應(yīng)用從科學(xué)計(jì)算轉(zhuǎn)向信息管理.信息管理中大量的數(shù)據(jù)都是文本數(shù)據(jù).如姓名,地址,簡(jiǎn)歷等等計(jì)算機(jī)中用字符串來(lái)表示文本數(shù)據(jù).3字符串類(lèi)型字符串:字符序列字符串字面值:用一對(duì)引號(hào)(單或雙)標(biāo)明.“hello world”!#$%&*“漢字也是字符”字符串中包含引號(hào)怎么辦?包含單引號(hào):串用雙引號(hào)括住包含雙引號(hào):串用單引號(hào)括住兩者都有:更一般的方法是串中用轉(zhuǎn)義字符print “Alice said, “Hello, Bob”Lu Chaojun, SJTU 4字符

2、串處理文本數(shù)據(jù)簡(jiǎn)單的字符串處理字符串的機(jī)內(nèi)表示字符串和密碼格式化輸出文件處理字符串的輸入普通變量的輸入num = input(“Enter a number: “)Enter a number : 5.6變量num得到值 5.6如果用同樣的方法輸入字符串str = input(“Enter a string: “)Enter a string: JohnPython會(huì)輸出出錯(cuò)信息原因:input()是把輸入當(dāng)成表達(dá)式來(lái)計(jì)算的!Lu Chaojun, SJTU 6字符串的正確輸入輸入時(shí)加上引號(hào)str = input(“Enter a string: “)Enter a string: JohnE

3、nter a string: “John”使用raw_input()str = raw_input(“Enter a string: “)Enter a string: Johninput與raw_inputx = input() x = raw_input()“John” Johnx xJohn Johnx = input() x = raw_input()3*4+2 3*4+2x x14 3*4+2Lu Chaojun, SJTU 8字符串賦值字符串可以直接賦值Str = abcdeStrabcde取字符字符串是字符序列,可通過(guò)位置索引訪問(wèn)每個(gè)字符.對(duì)長(zhǎng)度為n的字符串,索引可以是大于0的數(shù)

4、:自左向右為0 n1, 或者是負(fù)數(shù):自右向左為1, 2, 3, n 例如:若str = “Hello Bob”,則str0或str9是Hstr5或str4是 str8或str1是bstr9或str10越界出錯(cuò)取子串切段:取一個(gè)索引范圍內(nèi)的字符.:所取子串:位置索引從start end1start或/和end可省略,缺省值為串的首尾例如:若str = “Hello Bob”,則str0:3是Helstr5:9是 Bobstr:5即str0:5str5:即str5,9str:即str0:9連接兩字符串的連接 + 例如:“Hello” + “Bob”得到“HelloBob”一個(gè)字符串的重復(fù)例如:3*

5、“Hi”和“Hi”*3都得到“HiHiHi”串長(zhǎng)度函數(shù)len()編程實(shí)例:獲得每個(gè)月份的縮寫(xiě)在一個(gè)數(shù)據(jù)表里查找目標(biāo)def main():months=“JanFebMarAprMayJunJulAugSepOctNovDec”n = input(“Enter month number (1-12): ”)pos = (n-1)*3monthAbbr = monthspos:pos+3print “The month abbreviation is”,monthAbbr+”.”這是簡(jiǎn)單查找:利用位置規(guī)律來(lái)定位.若是月份全稱怎么辦?字符串處理文本數(shù)據(jù)簡(jiǎn)單的字符串處理字符串的機(jī)內(nèi)表示字符串和密碼格式

6、化輸出文件處理字符串的機(jī)內(nèi)表示與數(shù)值一樣,計(jì)算機(jī)內(nèi)用二進(jìn)制數(shù)表示每一個(gè)字符因此操作字符串本質(zhì)上仍然是數(shù)值運(yùn)算.表示字符的這個(gè)數(shù)值稱為字符的編碼.每個(gè)字符用什么編碼?對(duì)這個(gè)問(wèn)題的不同回答就導(dǎo)致了許多不同的字符編碼系統(tǒng)例如:字符集只包含AZ,分別用126表示.“8 5 12 12 15”是什么意思?編碼標(biāo)準(zhǔn)不同計(jì)算機(jī)若用不同編碼體系,則彼此無(wú)法溝通。標(biāo)準(zhǔn)化ASCII:?jiǎn)巫止?jié)編碼只用到7位: 0 - 12796個(gè)可打印字符,32個(gè)控制字符利用8位可擴(kuò)充ASCII: 0 - 255GB2312:兩字節(jié)(6763個(gè)漢字)GB18030:最多四字節(jié)(70244個(gè)漢字)Unicode:最多四字節(jié).字符與編碼

7、求給定字符的編碼: ord()ord(a)可得97求給定編碼的字符:chr()chr(97)可得a可見(jiàn)Python 2.7支持ASCII.支持中文編碼嗎?print “你好”字符串處理文本數(shù)據(jù)簡(jiǎn)單的字符串處理字符串的機(jī)內(nèi)表示字符串和密碼格式化輸出文件處理編碼編碼:輸出一串字符對(duì)應(yīng)的內(nèi)碼def main(): message=raw_input(Enter the message to encode:) for ch in message: print ord(ch),main()執(zhí)行時(shí)Enter the message to encode:abcdef97 98 99 100 101 102解

8、碼輸出一串?dāng)?shù)字對(duì)應(yīng)的字符串稱為解碼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()運(yùn)行時(shí)Enter the code of message:97 98 99 100the decoded message is:abcd幾個(gè)函數(shù)字符串與

9、數(shù)字的相互轉(zhuǎn)換eval(字符串):將字符串轉(zhuǎn)換成數(shù)字。例如:eval(“500”) 返回500str(表達(dá)式) :將數(shù)值當(dāng)作字符串。例如str(3+4*5)string.split:string庫(kù)中的函數(shù)字符串庫(kù)Python提供的string庫(kù)包含了很多有用的字符串處理函數(shù)例如split():將字符串拆分成子串string.split(“Hello string library!”)返回結(jié)果:Hello,string,library!string.split(“32,24,25,57”,”,”)返回結(jié)果:32,24,25,57字符串庫(kù)的常用函數(shù)capitalize(s): 使字符串s的首字母大

10、寫(xiě)capwords(s): 使字符串s中的每個(gè)單詞首字母大寫(xiě)center(s, width), ljust(s, width), rjust(s, width): 使s變成width寬度且居中/左對(duì)齊/右對(duì)齊count(s, sub): sub在s中出現(xiàn)次數(shù)find(s, sub), rfind(s, sub): 在s中找sub的首次/末次出現(xiàn)join(seq): 將串序列中的串合并成一個(gè)串,分隔符默認(rèn)為空格lower(s), upper(s): 將串變成小寫(xiě)/大寫(xiě)lstrip(s), rstrip(s): 刪除打頭/收尾的空格replace(s, oldsub, newsub): 在s中用新

11、子串替換舊子串字符串與密碼字符串在機(jī)內(nèi)使用一個(gè)數(shù)字序列表示。如果不知道采用什么編碼,只看這個(gè)數(shù)字序列是猜不出表示的是什么字符串。這就是一種加密機(jī)制,稱為替換法。字符編碼都是工業(yè)標(biāo)準(zhǔn),不是為了保密目的從編碼到密碼密碼:為了保密而對(duì)信息進(jìn)行編碼.加密是計(jì)算機(jī)的一個(gè)重要應(yīng)用明文密文加密解密凱撒密碼(Caesar cipher)a-D、b-E、 c-F、d-G、e-H s-V 、z-C eg. 明文:access control 可變?yōu)椋?DFFHVV FRQWURO 字符串處理文本數(shù)據(jù)簡(jiǎn)單的字符串處理字符串的機(jī)內(nèi)表示字符串和密碼格式化輸出文件處理格式化輸出格式化運(yùn)算符%語(yǔ)法 % ()語(yǔ)義:模板串中用

12、%標(biāo)記“空位”,輸出時(shí)用實(shí)際值填入.例如print “The price is $%0.2f” % (100)The price is $100.00格式描述%.三種類(lèi)型字符:decimal, float, string寬度:用多少位置顯示數(shù)值.省略或指定為0:根據(jù)值的實(shí)際長(zhǎng)度顯示.寬度超出值的長(zhǎng)度時(shí):右對(duì)齊顯示寬度前加負(fù)號(hào):左對(duì)齊.對(duì)浮點(diǎn)數(shù)用超長(zhǎng)寬度會(huì)怎樣?試試精度:指示浮點(diǎn)數(shù)值的小數(shù)位數(shù).省略:按系統(tǒng)默認(rèn)的小數(shù)位數(shù)顯示.print “%f” % (math.pi)浮點(diǎn)數(shù)如何精確化?浮點(diǎn)數(shù)的機(jī)內(nèi)表示是近似值.銀行應(yīng)用要求精確表示金額,故不宜用浮點(diǎn)數(shù)及浮點(diǎn)運(yùn)算.解決辦法:以“分”為單位,用整數(shù)

13、表示金額.設(shè)金額是x分,輸出時(shí)利用x/100和x%100分別得到“元”和“角分”.print “You have %d.%02d” % (x/100, x%100)02d:不足2位用0填充:語(yǔ)句換行繼續(xù)字符串處理文本數(shù)據(jù)簡(jiǎn)單的字符串處理字符串的機(jī)內(nèi)表示字符串和密碼格式化輸出文件處理文件處理文件:存儲(chǔ)在磁盤(pán)上的數(shù)據(jù)序列.典型的文件結(jié)構(gòu):基本數(shù)據(jù)項(xiàng):可為任何類(lèi)型若干數(shù)據(jù)項(xiàng)構(gòu)成記錄若干記錄構(gòu)成文件例如:學(xué)生基本數(shù)據(jù)項(xiàng):學(xué)號(hào),姓名,年齡一個(gè)學(xué)生記錄:學(xué)號(hào),姓名,年齡文件:全體學(xué)生記錄Lu Chaojun, SJTU 32文本文件文件中是文本數(shù)據(jù)文本文件可視為存儲(chǔ)在磁盤(pán)上的字符串.單行字符串多行字符串行

14、尾(EOL):用特殊字符,如新行(newline)字符.Python用n表示新行字符,該字符在顯示時(shí)被解釋成新行字符.例:print “first linensecond line”33文件處理:打開(kāi)文件程序不能直接與外存儲(chǔ)器交互信息,必須通過(guò)內(nèi)存進(jìn)行交流打開(kāi)文件:將磁盤(pán)文件與一個(gè)程序變量關(guān)聯(lián),做好讀寫(xiě)準(zhǔn)備. = open(,): “r”或“w”例如infile = open(“myfile”, “r”)outfile = open(“myfile”, “w”)寫(xiě)打開(kāi)時(shí)小心文件名!因?yàn)榭赡芷茐默F(xiàn)有文件34文件處理:讀寫(xiě)文件讀文件:讀出文件內(nèi)容.read():將整個(gè)文件作為一個(gè)字符串讀入.rea

15、dline():讀入一行.readlines():讀入所有行點(diǎn)表示法:文件是對(duì)象!寫(xiě)文件:將新內(nèi)容寫(xiě)入文件.write()若想寫(xiě)多行內(nèi)容,需寫(xiě)入n35文件處理:關(guān)閉文件關(guān)閉文件:取消文件變量與磁盤(pán)文件的關(guān)聯(lián).close()關(guān)閉文件時(shí),系統(tǒng)會(huì)將內(nèi)存中文件內(nèi)容輸出到磁盤(pán).Lu Chaojun, SJTU 36將整個(gè)文件作為一個(gè)字符串# file0.pydef main(): infile = open(encode.py, r) str = infile.read() print str infile.close()main()讀入文件的前5行# file1.pydef main(): infil

16、e = open(encode.py, r) for i in range(5): str = infile.readline() print str infile.close()main()讀入某個(gè)文件的所有行# file3.pydef main(): infile = open(encode.py, r) for line in infile.readlines(): print line infile.close()main()39END面向?qū)ο笈c圖形編程面向?qū)ο蟮乃枷雸D形化編程圖形對(duì)象的使用未知值的圖形化處理坐標(biāo)系的選擇圖形交互圖形模塊介紹424242數(shù)據(jù)與操作:傳統(tǒng)觀點(diǎn)數(shù)據(jù)類(lèi)型某種值

17、的集合運(yùn)算(操作)的集合計(jì)算就是對(duì)數(shù)據(jù)進(jìn)行操作數(shù)據(jù)與操作分離數(shù)據(jù)是被動(dòng)的, 操作是主動(dòng)的例如:string類(lèi)型的值是abc等, 對(duì)串的操作有+, *, len()等4343數(shù)據(jù)與操作:面向?qū)ο笥^點(diǎn)對(duì)象(Object):集數(shù)據(jù)與操作于一身.對(duì)象知道一些信息對(duì)象能對(duì)那些信息進(jìn)行處理計(jì)算:向?qū)ο蟀l(fā)出請(qǐng)求操作的消息.主動(dòng)的數(shù)據(jù)類(lèi)型面向?qū)ο?Object-Oriented):軟件系統(tǒng)由各種對(duì)象組成, 對(duì)象之間通過(guò)消息進(jìn)行交互.現(xiàn)代軟件系統(tǒng)幾乎都是OO設(shè)計(jì)和實(shí)現(xiàn).444444OO基本概念類(lèi)(class):描述同類(lèi)對(duì)象的共性包含的數(shù)據(jù):任何類(lèi)型的數(shù)據(jù),甚至可以是對(duì)其他對(duì)象的引用.能執(zhí)行的操作(方法)對(duì)象(o

18、bject):類(lèi)的實(shí)例(instance)同類(lèi)的不同對(duì)象可有不同的數(shù)據(jù)值(實(shí)例變量),但能執(zhí)行的操作是一樣的創(chuàng)建對(duì)象:使用類(lèi)的構(gòu)造器(constructor)初始化對(duì)象(,,)消息:請(qǐng)求對(duì)象執(zhí)行它的方法.(,,)對(duì)象的方法不同類(lèi)型的對(duì)象當(dāng)然提供不同的操作對(duì)象一般都提供讀取它的實(shí)例變量值的方法,統(tǒng)稱為accessor。例如Point對(duì)象的getX()和getY(),Line對(duì)象的getP1()和getP2()。對(duì)象一般也提供修改其實(shí)例變量的方法,統(tǒng)稱為mutator。例如所有圖形對(duì)象都有move(dx,dy)方法。45面向?qū)ο笈c圖形編程面向?qū)ο蟮乃枷雸D形化編程圖形對(duì)象的使用未知值的圖形化處理坐標(biāo)

19、系的選擇圖形交互圖形模塊介紹圖形界面命令行界面通過(guò)輸入一個(gè)個(gè)命令名字讓計(jì)算機(jī)去做某項(xiàng)特定的工作。如DOS系統(tǒng)。使用復(fù)雜,需要記住一個(gè)個(gè)命令。圖形用戶界面(GUI)利用窗口、圖標(biāo)、按鈕和菜單等方式驅(qū)動(dòng)程序的執(zhí)行。如window系統(tǒng)。使用方便圖形編程框架現(xiàn)代編程語(yǔ)言大都提供圖形化變成的工具Python有自帶的Tkinter本書(shū)作者寫(xiě)的圖形庫(kù):graphics.py放入文件夾:Python26Libsite_packagesimport graphics或 from graphics import *后者可使引用庫(kù)函數(shù)更方便48面向?qū)ο笈c圖形編程面向?qū)ο蟮乃枷雸D形化編程圖形對(duì)象的使用未知值的圖形化處

20、理坐標(biāo)系的選擇圖形交互圖形模塊介紹創(chuàng)建和關(guān)閉窗口圖形窗口:畫(huà)圖的地方創(chuàng)建一個(gè)窗口對(duì)象用import graphicswin = graphics.GraphWin()win = graphics.GraphWin(窗口的名字,行像素?cái)?shù),列像素?cái)?shù))用from graphics import *win = GraphWin()win = GraphWin (窗口的名字 ,行像素?cái)?shù),列像素?cái)?shù))關(guān)閉窗口:win.close()50圖的內(nèi)部表示數(shù)字圖像的表示:用像素(pixel)表示,像素越多,質(zhì)量越好。黑白圖像的像素需要一個(gè)bit表示。如1表示白,0表示黑。如需要表示灰度和彩色,則需要多于1個(gè)bit。

21、每個(gè)像素占用的bit越多,圖像質(zhì)量越好。分辨率:圖象中的像素?cái)?shù)。圖形庫(kù)創(chuàng)建的窗口默認(rèn)的分辨率是200*200圖形對(duì)象的操作小測(cè)驗(yàn):窗口中有哪幾類(lèi)對(duì)象?創(chuàng)建一個(gè)對(duì)象各類(lèi)對(duì)象的公共操作將對(duì)象顯示在窗口中:draw移動(dòng)對(duì)象:move設(shè)置對(duì)象的填充顏色:setFill設(shè)置對(duì)象的邊界顏色:setOutline點(diǎn)點(diǎn):圖形窗口的一個(gè)像素,位置用坐標(biāo)(x,y)表示。坐標(biāo)系統(tǒng)原點(diǎn)(0,0):左上角x軸:自左向右y軸:自頂向下小測(cè)試:默認(rèn)大小的圖形窗口,右下角坐標(biāo)是?53點(diǎn)(續(xù))創(chuàng)建Point類(lèi)的對(duì)象Point(,)例: p = Point(50,60)對(duì)Point對(duì)象的操作求坐標(biāo):p.getX(), p.get

22、Y()在窗口中畫(huà)自己:p.draw(win)設(shè)置點(diǎn)的顏色:p.setOutline(red)移動(dòng)點(diǎn):p.move(dx, dy)54線段創(chuàng)建 Line 類(lèi)的對(duì)象Line(,)例如l = Line(Point(0,0),Point(100,100)對(duì) Line 對(duì)象的操作在窗口中畫(huà)自己l.draw(win)55圓形創(chuàng)建Circle類(lèi)的對(duì)象Circle(,)例如c = Circle(Point(50,50),40)對(duì)Circle對(duì)象的操作填充顏色c.setFill(red)在窗口中畫(huà)自己c.draw(win)56橢圓給定一個(gè)矩形框,創(chuàng)建一個(gè)內(nèi)切Oval類(lèi)的對(duì)象Oval(,)例如o = Oval(P

23、oint(20,150),Point(180,199)對(duì)Oval對(duì)象的操作在窗口中畫(huà)自己o.draw(win)57矩形創(chuàng)建Rectangle類(lèi)的對(duì)象Rectangle(,)例如r = Rectangle(Point(5,8),Point(30,40)對(duì)Rectangle對(duì)象的操作在窗口中畫(huà)自己r.draw(win)58多邊形創(chuàng)建Polygon類(lèi)的對(duì)象Polygon(,)例如p = Polygon(Point(10,10), Point(30,30),Point(10,30)對(duì)Polygon對(duì)象的操作在窗口中畫(huà)自己p.draw(win)59文本創(chuàng)建Text類(lèi)的對(duì)象t = Text(,)例如t =

24、 Text(Point(99,99),”text here”)對(duì)Text對(duì)象的操作在窗口中畫(huà)自己t.draw(win)重設(shè)字符串t.setText(“new text”)60實(shí)例:畫(huà)兩只眼睛方法一:直接創(chuàng)建兩個(gè)對(duì)象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利用對(duì)象復(fù)制錯(cuò)誤代碼leftEye = Circle(Point

25、(80,50),5)leftEye.setFill(yellow)leftEye.setOutline(red)rightEye = leftEyerightEye.move(20,50)Python中圖像對(duì)象的賦值是為對(duì)象取一個(gè)別名,而不是創(chuàng)建一個(gè)新對(duì)象!正確代碼leftEye = Circle(Point(80,50),5)leftEye.setFill(yellow)leftEye.setOutline(red)rightEye = Circle(Point(100,50),5)rightEye.setFill(yellow)rightEye.setOutline(red)更美觀的代碼使

26、用clone()復(fù)制對(duì)象leftEye = Circle(Point(80,50),5)leftEye.setFill(yellow)leftEye.setOutline(red)rightEye = leftEye.clone()rightEye.move(20,0)64面向?qū)ο笈c圖形編程面向?qū)ο蟮乃枷雸D形化編程圖形對(duì)象的使用未知值的圖形化處理坐標(biāo)系的選擇圖形交互圖形模塊介紹編程實(shí)例:投資收益柱狀圖用柱狀圖表示10年的投資收益.每年的收益是一個(gè)矩形。這些矩形有相同的寬度,但有不同的高度66算法輸入本金和年利率創(chuàng)建圖形窗口確定比例:1原先對(duì)應(yīng)的高度,每一年占用的寬度窗口左邊畫(huà)上刻度0號(hào)位置畫(huà)對(duì)

27、應(yīng)初始本金的矩形,高度為本金值對(duì)接下來(lái)的1到10年:高度principal = principal * (1 + apr)在相應(yīng)位置畫(huà)對(duì)應(yīng)本利的矩形進(jìn)一步細(xì)化確定圖形窗口的尺寸:如果我們的顯示器用的分辨率是1024*768,我們希望圖形占四分之一的畫(huà)面,則可以把分辨率定為512*384創(chuàng)建一個(gè)相應(yīng)的窗口創(chuàng)建512*384的圖形窗口,標(biāo)題為Investment Growth ChartPython代碼win = GraphWin(Investment Growth Chart, 512, 384)68進(jìn)一步細(xì)化(續(xù))確定刻度的內(nèi)容和位置內(nèi)容:0.0K,2.5K,5.0K,7.5K,10.0K位置

28、:確定水平方向30像素為一年,從第80像素開(kāi)始;垂直方向5個(gè)刻度($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函數(shù)實(shí)現(xiàn)69進(jìn)一步細(xì)化(續(xù))確定0號(hào)柱子的位置和高度位置: 左下角坐標(biāo)為(20,320)高度: principal * (280 / 10000),即右上角y坐標(biāo)為320 princip

29、al * (280 / 10000).寬度: 故右上角x坐標(biāo)為20 + 30 = 50算法精化0號(hào)柱:從(20,320)到(50,320- principal*0.028)畫(huà)矩形70進(jìn)一步細(xì)化(續(xù))其他柱子的位置和高度位置: 左下角為(x, 320).高度: principal*(280/10000),則右上角y坐標(biāo)為320 principal*(280/10000).寬度: 30,故右上角x坐標(biāo)為(左下角x坐標(biāo)+30)算法精化for year 從1到10:principal = principal * (1 + apr)x = 25 * year + 40height = principal

30、 * 0.02從(x,230)到(x + 25,230-height)畫(huà)矩形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, 4

31、0), 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

32、(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()面向?qū)ο笈c圖形編程面向?qū)ο蟮乃枷雸D形化編程圖形對(duì)象的使用未知值的圖形化處理坐標(biāo)系的選擇圖形交互圖形模塊介紹自定義坐標(biāo)系默認(rèn)坐標(biāo)系以像素為單位,編程很麻煩.坐標(biāo)變換:實(shí)際數(shù)據(jù)需映射成窗口像素位置.Graphics模塊提供自定義坐標(biāo)系的功能,使坐標(biāo)變換自動(dòng)完成.好處編程簡(jiǎn)單直觀改變窗口像素尺寸對(duì)程序幾乎沒(méi)影響75自定義坐標(biāo)系setCoords(左下角的

33、新坐標(biāo),左下角的y坐標(biāo),右上角的x坐標(biāo),右上角的y坐標(biāo))Python自動(dòng)進(jìn)行新坐標(biāo)系和像素之間的轉(zhuǎn)換例子:坐標(biāo)系變換例如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)新坐標(biāo)系為:左下角(0,0),右上角(3,3)系統(tǒng)自動(dòng)把新坐

34、標(biāo)變換成200*200像素坐標(biāo)編程實(shí)例:柱狀圖的改進(jìn)(graph1)Lu Chaojun, SJTU 77graph1將x坐標(biāo)分為13份,從0到13將y坐標(biāo)分成6份,從0到6X坐標(biāo)1-2是當(dāng)年信息,2-3是一年后的信息,以此類(lèi)推Y坐標(biāo)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

35、(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

36、) 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() 面向?qū)ο笈c圖形編程面向?qū)ο蟮乃枷雸D形化編程圖形對(duì)象的使用未知值的圖形化處理坐標(biāo)系的選擇圖形交互圖形模塊介紹圖形交互界面GUI:圖形元素用于輸入輸出事件:移動(dòng)鼠標(biāo)

37、,點(diǎn)擊按鈕,選菜單等.也是對(duì)象事件發(fā)生后,有相應(yīng)事件處理程序來(lái)處理.事件驅(qū)動(dòng)的編程捕獲事件處理事件:一段程序81捕獲鼠標(biāo)點(diǎn)擊GraphWin類(lèi)有一個(gè)方法getMouse():調(diào)用時(shí)等待用戶點(diǎn)擊,并返回點(diǎn)擊位置(是個(gè)Point對(duì)象).例如:win = GraphWin(Click Me!)for i in range(10):p = win.getMouse()print You clicked (%d, %d) % (p.getX(), p.getY()82編程實(shí)例:triangle.py設(shè)計(jì)一個(gè)程序,用鼠標(biāo)在窗口中任意點(diǎn)三個(gè)點(diǎn),將這三個(gè)點(diǎn)連成一個(gè)三角形。# 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.getM

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論