資源簡(jiǎn)介 (共37張PPT)Python少兒編程第六章 會(huì)畫(huà)畫(huà)的“小海龜”目錄1.1“小海龜”的自我介紹1.2“小海龜”的畫(huà)布1.3“小海龜”的畫(huà)筆1.4多彩的圖畫(huà)PART 01“小海龜”的自我介紹“小海龜”的自我介紹1turtle圖形庫(kù)源于1967年誕生的Logo語(yǔ)言,是Python有趣的繪圖工具。turtle庫(kù)因其簡(jiǎn)單便捷的圖形化方法和立即反饋式的繪畫(huà)效果,大大增強(qiáng)了編程的趣味性,也因此成為Python編程初學(xué)者的首選。turtle庫(kù)的使用原理其實(shí)很簡(jiǎn)單,我們可以把它想象成一只在沙灘上爬行的小海龜,在它的身后會(huì)留下深深的軌跡,沙灘就是畫(huà)布,軌跡就是圖形。在計(jì)算機(jī)中,可以把窗口看作畫(huà)布,程序就是指揮員,控制小海龜在窗口上移動(dòng),經(jīng)過(guò)的軌跡就是圖形。利用turtle庫(kù),可以繪制各種簡(jiǎn)單到復(fù)雜的圖形,如圖6-1所示。圖6-1 利用turtle庫(kù)繪制的圖形“小海龜”的自我介紹1就是標(biāo)準(zhǔn)坐標(biāo)系,即以繪圖界面的中心點(diǎn)為坐標(biāo)原點(diǎn)(0,0),以x坐標(biāo)正方向?yàn)?度角,逆時(shí)針旋轉(zhuǎn)。turtle庫(kù)中默認(rèn)使用standard模式。(1)standard模式(2)logo模式(3)world模式是以繪圖界面的中心點(diǎn)為坐標(biāo)原點(diǎn)(0,0),以y坐標(biāo)正方向?yàn)?度角,順時(shí)針旋轉(zhuǎn)。使用用戶自定義的“世界坐標(biāo)系”。turtle庫(kù)的坐標(biāo)和角度系統(tǒng)PART 02“小海龜”的畫(huà)布“小海龜”的畫(huà)布2導(dǎo)入turtle庫(kù)后直接運(yùn)行程序,會(huì)默認(rèn)創(chuàng)建一個(gè)空白窗口,其繪圖區(qū)域(即畫(huà)布)使用直角坐標(biāo)系(x坐標(biāo)和y坐標(biāo))描述位置,原點(diǎn)在中心。turtle庫(kù)提供了多種函數(shù)用于設(shè)置窗口,如表6-1所示。表6-1 turtle庫(kù)提供的用于設(shè)置窗口的函數(shù)“小海龜”的畫(huà)布2【例6-1】 設(shè)置窗口的背景顏色和圖片。【參考代碼】import turtle #導(dǎo)入turtle庫(kù)turtle.setup(500, 500) #設(shè)置窗口大小turtle.bgcolor('Green') #設(shè)置窗口背景顏色turtle.bgpic('蝴蝶.gif') #設(shè)置背景圖片turtle.done() #完成“小海龜”的畫(huà)布2【運(yùn)行結(jié)果】 程序運(yùn)行結(jié)果如圖6-2所示。圖6-2 例6-1程序運(yùn)行結(jié)果【程序說(shuō)明】 使用turtle庫(kù)繪制圖形時(shí),程序最后須使用done()函數(shù)使程序暫停,停止畫(huà)筆繪制,但不關(guān)閉繪圖窗口。PART 03“小海龜”的畫(huà)筆移動(dòng)畫(huà)筆3.1turtle庫(kù)提供了多種函數(shù)用于移動(dòng)畫(huà)筆,使其在畫(huà)布上繪制圖形,常用的函數(shù)如表6-2所示。表6-2 turtle庫(kù)提供的用于移動(dòng)畫(huà)筆常用的函數(shù)移動(dòng)畫(huà)筆3.1表6-2 turtle庫(kù)提供的用于移動(dòng)畫(huà)筆常用的函數(shù)(續(xù))移動(dòng)畫(huà)筆3.1表6-2 turtle庫(kù)提供的用于移動(dòng)畫(huà)筆常用的函數(shù)(續(xù))移動(dòng)畫(huà)筆3.1【例6-2】 繪制五角星。【問(wèn)題分析】 創(chuàng)建變量distance表示五角星的邊長(zhǎng),然后循環(huán)5次繪制邊。循環(huán)中使用forward()函數(shù)前進(jìn)distance,然后使用right()函數(shù)右轉(zhuǎn)144度。其中,144度為五角星的外角角度,其計(jì)算方法為180 180/5,180/5為五角星的內(nèi)角角度。【參考代碼】import turtle #導(dǎo)入turtle庫(kù)turtle.shape('turtle') #設(shè)置為海龜形狀distance = 200 #設(shè)置前進(jìn)距離for i in range(5): #循環(huán)5次turtle.forward(distance) #前進(jìn)distanceturtle.right(144) #右轉(zhuǎn)144度turtle.done() #完成移動(dòng)畫(huà)筆3.1【運(yùn)行結(jié)果】 程序運(yùn)行結(jié)果如圖6-3所示。圖6-3 例6-2程序運(yùn)行結(jié)果【程序說(shuō)明】 此案例中可使用多種函數(shù)移動(dòng)畫(huà)筆,改變朝向時(shí)也可左轉(zhuǎn),只是繪制的五角星的方向不同。控制畫(huà)筆3.2繪制圖形時(shí),有時(shí)需要移動(dòng)畫(huà)筆,但不想留下軌跡,此時(shí)可以通過(guò)控制畫(huà)筆的抬起和落下來(lái)實(shí)現(xiàn)。此外,還可以設(shè)置畫(huà)筆的顏色和粗細(xì),turtle庫(kù)中常用的控制畫(huà)筆的函數(shù)如表6-3所示。表6-3 turtle庫(kù)中常用的控制畫(huà)筆的函數(shù)控制畫(huà)筆3.2【例6-3】 繪制一條逐漸變粗的紅色虛線。【問(wèn)題分析】 虛線由多段短的空白和短線組成,可以使用循環(huán)實(shí)現(xiàn)。在循環(huán)中,使用pensize()函數(shù)的返回值加0.2設(shè)置下一次短線的粗細(xì),然后畫(huà)筆放下,繪制長(zhǎng)度為5的短線后畫(huà)筆抬起,畫(huà)筆前進(jìn)5,完成一次繪制。【參考代碼】import turtle #導(dǎo)入turtle庫(kù)turtle.shape('turtle') #設(shè)置為海龜形狀turtle.pencolor('Red') #設(shè)置畫(huà)筆顏色為紅色控制畫(huà)筆3.2【參考代碼】(續(xù))for i in range(20): #循環(huán)20次turtle.pensize(turtle.pensize() + 0.2) #設(shè)置畫(huà)筆粗細(xì)turtle.pendown() #畫(huà)筆落下turtle.forward(5) #前進(jìn)5turtle.penup() #畫(huà)筆抬起turtle.forward(5) #前進(jìn)5turtle.done() #完成【運(yùn)行結(jié)果】 程序運(yùn)行結(jié)果如圖6-4所示。圖6-4 例6-3程序運(yùn)行結(jié)果畫(huà)圈3.3turtle庫(kù)提供了circle()函數(shù)用于繪制圓,其語(yǔ)法格式如下。circle(radius, extent=None, steps=None)其中,radius表示半徑;extent表示夾角,用于繪制圓的一部分,如果缺省,則繪制整個(gè)圓,如果不是完整的圓周(360的倍數(shù)),則以當(dāng)前畫(huà)筆位置為端點(diǎn)繪制圓弧;steps表示邊的數(shù)量,由于圓實(shí)際是內(nèi)切正多邊形近似得到的,所以此方法也可用于繪制正多邊形,邊數(shù)由steps決定。繪制圓時(shí),如果radius為正值表示逆時(shí)針?lè)较蚶L制圓,否則表示順時(shí)針?lè)较蚶L制圓,最終畫(huà)筆的朝向會(huì)依據(jù)extent的值改變。畫(huà)圈3.3【例6-4】 繪制圓、正五邊形、圓弧和五邊弧線。【參考代碼】import turtle #導(dǎo)入turtle庫(kù)turtle.circle(50) #繪制半徑為50的圓turtle.penup() #畫(huà)筆抬起turtle.forward(150) #前進(jìn)150turtle.pendown() #畫(huà)筆落下turtle.circle(50, steps=5) #繪制半徑為50的正五邊形turtle.penup() #畫(huà)筆抬起turtle.forward(150) #前進(jìn)150turtle.pendown() #畫(huà)筆落下turtle.circle(50, 180) #繪制半徑為50,夾角為180度的圓弧畫(huà)圈3.3【參考代碼】(續(xù))turtle.penup() #畫(huà)筆抬起turtle.home() #回到原點(diǎn)turtle.forward(450) #前進(jìn)450turtle.pendown() #畫(huà)筆落下turtle.circle(50, 180, 5) #繪制半徑為50,夾角為180度,邊數(shù)為5的弧線turtle.done() #完成【運(yùn)行結(jié)果】 程序運(yùn)行結(jié)果如圖6-5所示。圖6-5 例6-4程序運(yùn)行結(jié)果畫(huà)圈3.3【程序說(shuō)明】 從運(yùn)行結(jié)果可以看出,第1次調(diào)用circle()函數(shù)時(shí)只有radius參數(shù)(50),繪制的是一個(gè)圓;第2次調(diào)用circle()函數(shù)時(shí)有radius和steps參數(shù)(50和5),繪制的是一個(gè)正五邊形;第3次調(diào)用circle()函數(shù)時(shí)有radius和extent參數(shù)(50和180),繪制的是一個(gè)180度的圓弧;第4次調(diào)用circle()函數(shù)時(shí)有radius、extent和steps參數(shù)(50、180和5),繪制的是一個(gè)180度的五邊弧線。turtle庫(kù)還提供了dot()函數(shù)用于繪制圓點(diǎn),其語(yǔ)法格式如下。turtle.dot(size=None, *color)其中,size表示圓點(diǎn)直徑,缺省時(shí),size取pensize+4和2*pensize中的較大值;color表示圓點(diǎn)顏色,缺省時(shí)為當(dāng)前畫(huà)筆顏色。繪制圓點(diǎn)時(shí),當(dāng)前畫(huà)筆位置為圓心。畫(huà)圈3.3【例6-5】 繪制圓和圓點(diǎn)。【參考代碼】import turtle #導(dǎo)入turtle庫(kù)turtle.circle(50) #繪制半徑為50的圓turtle.dot(50) #繪制直徑為50的圓點(diǎn)turtle.done() #完成【運(yùn)行結(jié)果】 程序運(yùn)行結(jié)果如圖6-6所示。圖6-6 例6-5程序運(yùn)行結(jié)果【程序說(shuō)明】 從運(yùn)行結(jié)果可以看出,雖然circle()和dot()函數(shù)的參數(shù)相同,都為50,但在circle()函數(shù)中表示半徑,而在dot()函數(shù)中表示直徑,所以圓和圓點(diǎn)的大小不同。寫(xiě)字3.4write(arg,move=False,align='left',font=('Arial',8,'normal'))turtle庫(kù)提供了write()函數(shù)用于寫(xiě)字,其語(yǔ)法格式如下。其中,arg表示文字;move表示畫(huà)筆是否跟隨文字移動(dòng)到文字右下角,如果為T(mén)rue則移動(dòng);align表示對(duì)齊方式,為一個(gè)字符串,可取值“l(fā)eft”“center”或“right”;font表示字體格式,為一個(gè)元組,包括字體、大小和類(lèi)型。寫(xiě)字3.4【例6-6】 “小海龜”的自我介紹。【問(wèn)題分析】 首先,設(shè)置字體,并抬起畫(huà)筆不畫(huà)線,寫(xiě)第1行字;然后,畫(huà)筆右轉(zhuǎn)90度,前進(jìn)30(向下移一行)后,寫(xiě)第2行字;最后,畫(huà)筆前進(jìn)30后,寫(xiě)第3行字。【參考代碼】import turtle #導(dǎo)入turtle庫(kù)font1 = ('黑體', 14, 'normal') #設(shè)置字體turtle.penup() #畫(huà)筆抬起turtle.write('大家好,', True, font=font1) #寫(xiě)第1行字turtle.right(90) #右轉(zhuǎn)90度turtle.forward(30) #前進(jìn)30turtle.write('我是小海龜,', True, font=font1) #寫(xiě)第2行字寫(xiě)字3.4【參考代碼】(續(xù))turtle.forward(30) #前進(jìn)30#寫(xiě)第3行字turtle.write('我可以幫大家繪制各種漂亮的圖形哦!', True, font=font1)turtle.done() #完成【運(yùn)行結(jié)果】 程序運(yùn)行結(jié)果如圖6-7所示。圖6-7 例6-6程序運(yùn)行結(jié)果【程序說(shuō)明】 從運(yùn)行結(jié)果可以看出,畫(huà)筆右轉(zhuǎn)90度后,朝向變?yōu)槟希秋@示的字還是從左到右,且畫(huà)筆跟隨文字移動(dòng)到右下角。PART 04多彩的圖畫(huà)多彩的圖畫(huà)4turtle庫(kù)還提供了fillcolor(*args)函數(shù)設(shè)置或返回圖形的填充顏色,其中,args表示填充的顏色,它有下面4種格式。(1)調(diào)用本身、bgcolor()函數(shù)或pencolor()函數(shù)的返回值。(2)指定的Tk標(biāo)準(zhǔn)顏色字符串,如“Red”(紅色)、“Yellow”(黃色)、“#ff0000”(紅色)等。(3)r、g、b元組表示的RGB顏色,如fillcolor((1.0,0,0))。r、g、b取值范圍為0~colormode,其中,colormode的值為1.0或255。如果colormode的值取255,須先使用colormode(255)函數(shù)設(shè)置顏色模式為255,且r、g、b須為整數(shù)。(4)r、g、b表示的RGB顏色,如fillcolor(1.0,0,0)。turtle庫(kù)還提供了color(*args)函數(shù)同時(shí)設(shè)置或返回畫(huà)筆和填充顏色。如果只有一個(gè)參數(shù),表示畫(huà)筆和填充顏色相同;如果有兩個(gè)參數(shù),則第一個(gè)參數(shù)表示畫(huà)筆顏色,第二個(gè)參數(shù)表示填充顏色。多彩的圖畫(huà)4【例6-7】 繪制不同顏色花瓣的6花瓣圖形。【問(wèn)題分析】 首先進(jìn)行初始化設(shè)置(圓弧半徑radius為150,花瓣數(shù)n為6,畫(huà)筆顏色為紅色);然后計(jì)算圓弧夾角extent和正多邊形的內(nèi)角angle,其中,extent=360/n,angle=(n 2)*180/n;最后循環(huán)繪制6個(gè)花瓣。其中,一個(gè)花瓣的繪制過(guò)程為:首先隨機(jī)生成r、g、b,并設(shè)置填充顏色;接著繪制半徑為radius、夾角為extent度的圓弧,并左轉(zhuǎn)angle度后,再繪制半徑為radius、夾角為extent度的圓弧;然后左轉(zhuǎn)180度;最后填充顏色。多彩的圖畫(huà)4【參考代碼】import turtle #導(dǎo)入turtle庫(kù)import random #導(dǎo)入random庫(kù)radius = 150 #初始化圓弧半徑為150n = 6 #初始化花瓣數(shù)為6extent = 360/n #計(jì)算繪制圓弧的夾角angle = (n-2)*180/n #計(jì)算正n邊形的內(nèi)角turtle.colormode(255) #設(shè)置顏色模式為255turtle.pencolor('Red') #設(shè)置畫(huà)筆顏色為紅色多彩的圖畫(huà)4【參考代碼】(續(xù))for i in range(n): #循環(huán)n次r = random.randint(0, 255) #生成1~255的隨機(jī)整數(shù)并賦給rg = random.randint(0, 255) #生成1~255的隨機(jī)整數(shù)并賦給gb = random.randint(0, 255) #生成1~255的隨機(jī)整數(shù)并賦給bturtle.fillcolor(r, g, b) #設(shè)置填充顏色為隨機(jī)生成的r、g、bturtle.begin_fill() #開(kāi)始填充turtle.circle(radius, extent) #繪制半徑為radius的extent度圓弧turtle.left(angle) #左轉(zhuǎn)angle度turtle.circle(radius, extent) #繪制半徑為radius的extent度圓弧turtle.left(180) #左轉(zhuǎn)180度turtle.end_fill() #結(jié)束填充turtle.done() #完成多彩的圖畫(huà)4【運(yùn)行結(jié)果】 程序運(yùn)行結(jié)果如圖6-8所示。圖6-8 例6-7程序運(yùn)行結(jié)果多彩的圖畫(huà)4【例6-8】 根據(jù)輸入的邊數(shù)繪制彩色螺旋線。【問(wèn)題分析】 螺旋線可以看作是由逐漸變大的多邊形交叉螺旋而成。例如,邊數(shù)為5時(shí),效果如圖6-9所示。首先,設(shè)置顏色列表,包含6種顏色;然后,定義函數(shù)spirals(n)循環(huán)畫(huà)線(n取值2~6,循環(huán)變量為x)繪制螺旋線,循環(huán)中選擇列表中的顏色(索引為x%n)設(shè)置為畫(huà)筆顏色后,畫(huà)筆前進(jìn)2*x像素,再左轉(zhuǎn)360/n+1度(正n邊形的外角為360/n度,由于螺旋線應(yīng)向外擴(kuò)展,所以左轉(zhuǎn)角度為外角度數(shù)加1度);最后輸入邊數(shù),調(diào)用spirals()函數(shù)。多彩的圖畫(huà)4圖6-9 5邊彩色螺旋線多彩的圖畫(huà)4【參考代碼】import turtle as t #導(dǎo)入turtle庫(kù)為t#創(chuàng)建顏色列表colors = ['Red', 'Black', 'Purple', 'Blue', 'Green', 'Brown']def spirals(n): #定義spirals()函數(shù),參數(shù)為邊數(shù)t.tracer(False) #不顯示繪制過(guò)程for x in range(360): #循環(huán)360次t.pencolor(colors[x % n]) #設(shè)置畫(huà)筆顏色t.forward(2 * x) #前進(jìn)x的2倍#左轉(zhuǎn)正n邊形的外角度數(shù)加1度,形成交叉螺旋t.left(360 / n + 1)t.tracer(True) #顯示繪制軌跡n = int(input('請(qǐng)輸入邊數(shù):')) #輸入邊數(shù)spirals(n) #調(diào)用spirals()函數(shù)t.done() #完成多彩的圖畫(huà)4【運(yùn)行結(jié)果】 運(yùn)行程序,輸入邊數(shù)(3或6),繪制結(jié)果如圖6-10所示。圖6-10 例6-8程序運(yùn)行結(jié)果感謝觀看 展開(kāi)更多...... 收起↑ 資源預(yù)覽 縮略圖、資源來(lái)源于二一教育資源庫(kù)