Pyhton少兒編程(4)turtle庫(kù)

一、turtle的坐標(biāo)系
turue的坐標(biāo)系有兩個(gè):一個(gè)是畫布在整個(gè)屏幕中的坐標(biāo)系,以下簡(jiǎn)稱“畫布坐標(biāo)系”,另一個(gè)是畫筆在整個(gè)畫布中的坐標(biāo)系,以下簡(jiǎn)稱“畫筆坐標(biāo)系”。
1、畫布坐標(biāo)系:
(1)起點(diǎn)坐標(biāo):畫布起點(diǎn)坐標(biāo)(0, 0)位于屏幕左上方的頂點(diǎn)處,向右x坐標(biāo)增加,向下y坐標(biāo)增加。
(2)單位:是“像素”。在Scratch圖形化編程中,距離單位是“步”。Python中的“像素”和Scratch中的“步”屬于同一個(gè)概念,都是表達(dá)長(zhǎng)度的最小單元。
(3)畫布設(shè)置:使用setup()函數(shù)設(shè)置畫布的大小和位置。調(diào)用格式如下:turtle.setup(width, height, startx, starty)。width表示畫布的寬度,height表示畫布的高度,startx表示畫布左上頂點(diǎn)的x坐標(biāo),starty表示畫布左上頂點(diǎn)的y坐標(biāo)。如下圖:藍(lán)框表示屏幕邊界,紅框表示畫布邊界。

(4)默認(rèn)參數(shù):在python中,有很多參數(shù)都是有默認(rèn)值的,如果不填寫參數(shù),程序運(yùn)行時(shí)就會(huì)使用默認(rèn)值,如果不想使用默認(rèn)值,就手動(dòng)填入?yún)?shù)。setup()函數(shù)的四個(gè)參數(shù)都有默認(rèn)值,寬度默認(rèn)為屏幕寬度的50%,高度默認(rèn)為屏幕高度的75%,起始坐標(biāo)默認(rèn)為None(居中顯示)。畫布的寬高,可以按照像素設(shè)定,也可以按照百分比設(shè)定;當(dāng)給定的參數(shù)大于或等于1時(shí),按照像素設(shè)定畫布大小,當(dāng)給定的參數(shù)介于0~1之間時(shí),按照百分比設(shè)定畫布大小。
(5)參數(shù)設(shè)定順序:Python中參數(shù)有位置參數(shù)和關(guān)鍵字參數(shù)之分。位置參數(shù)傳參時(shí)前面不帶“變量名=”,順序不可變,按照傳參順序賦值;關(guān)鍵字參數(shù)傳參時(shí)前面帶“變量名=”,順序可變,按照參數(shù)名賦值。比如,turtle.setup(200, ,300),給定的是位置參數(shù),只給定了前兩個(gè)參數(shù),此時(shí),只能設(shè)定畫布的寬度和高度,畫布的起點(diǎn)位置使用默認(rèn)值。
如果想讓上面的兩個(gè)參數(shù)設(shè)定為畫布的起點(diǎn)坐標(biāo),寬度和高度使用默認(rèn)值,就要使用關(guān)鍵字參數(shù):turtle.setup(startx=200, starty=300),或者可以顛倒x坐標(biāo)和y坐標(biāo)的設(shè)定順序:turtle.setup(starty=300, startx=200)。
2、畫筆坐標(biāo)系:
與畫布坐標(biāo)系是不同,畫筆坐標(biāo)系以畫布的中心點(diǎn)為原點(diǎn)(0, 0),這一點(diǎn)跟Scartch圖形化編程的坐標(biāo)體系一模一樣。

二、turtle的畫筆體系
1、畫筆的創(chuàng)建:
創(chuàng)建格式如下:t= turtle.Turtle()。t為畫筆名稱,turtle.Turtle()是創(chuàng)建畫筆的函數(shù)。Turtle()函數(shù)有一個(gè)更加簡(jiǎn)短、貼切的別名:Pen()函數(shù),注意首字母都要大寫;使用方法如下:p = turtle.Pen()。
2、畫筆的設(shè)置:
pensize(width)、width(width):設(shè)置畫筆粗細(xì),不加參數(shù),返回當(dāng)前畫筆粗細(xì);
penup()、pu()、up():抬筆操作,無需參數(shù);
pendown()、pd()、down():落筆操作,無需參數(shù);
isdown():判斷畫筆是否落筆,無需參數(shù);
hideturtle()、ht():隱藏畫筆圖標(biāo),無需參數(shù);
showturtle()、st():顯示小烏龜圖標(biāo),無需參數(shù);
isvisible():判斷畫筆是否隱藏,無需參數(shù);
shape(name):設(shè)定畫筆形狀,不加參數(shù),返回當(dāng)前形狀名稱(小海龜?shù)男螤罟灿?種,分別為“arrow”、“turtle”、“circle”、“square”、“triangle”和“classic”,在設(shè)定的時(shí)候,只能填入這6種名稱中的一個(gè),否則會(huì)報(bào)錯(cuò));
write(arg, move=False, align='left', font=('Arial', 8, 'normal')):文字書寫函數(shù),agr是要書寫的文字(字符串類型),為必選參數(shù);move為可選參數(shù)(布爾類型),默認(rèn)為False,當(dāng)為True時(shí),畫筆圖標(biāo)會(huì)移到文字部分的右下角;align為可選參數(shù)(字符串類型),用于設(shè)定文字書寫的對(duì)齊方式,有‘left’、‘center’、‘right’三個(gè)選項(xiàng),默認(rèn)為‘left’;font為可選參數(shù)(三元組格式),用于設(shè)定字體、大小和樣式。
3、顏色的設(shè)置:
pencolor():用于返回或設(shè)置畫筆顏色,顏色的設(shè)定可以使用指定的顏色字符串,如“red”、“blue”等,也可以使用RGB三元組數(shù)值表達(dá)顏色,如(255, 0, 0)表示紅色,(0, 255, 255, 0)表示綠色;
fillcolor():用于返回或設(shè)置填充色,用法與pencolor()一樣;
color():用于返回或設(shè)置畫筆色和填充色,相當(dāng)于pencolor加fillcolor,設(shè)定顏色的時(shí)候,需要給定兩個(gè)顏色參數(shù),第一個(gè)用于設(shè)定畫筆顏色,第二個(gè)用于填充色;注意:如果只給了一個(gè)顏色參數(shù),則畫筆色和填充色都設(shè)定成這一種顏色;
begin_fill():設(shè)定填充起點(diǎn),在填充之前調(diào)用;
end_fill():設(shè)定填充終點(diǎn),為從起點(diǎn)到終點(diǎn)繪制的圖形填充顏色;
turtle.bgcolor():設(shè)定背景顏色(即畫布顏色)。
4、易錯(cuò)提醒:
(1)注意函數(shù)名稱的首字母,有的是大寫,有的是小寫,區(qū)分原則如下:實(shí)現(xiàn)某種操作功能的函數(shù)(如落筆、移動(dòng)),首字母小寫;創(chuàng)建新的對(duì)象的函數(shù)(如創(chuàng)建畫筆),首字母大寫。
(2)bgcolor()函數(shù)是畫布的顏色設(shè)定函數(shù),畫筆沒有這個(gè)函數(shù)。
三、turtle的運(yùn)動(dòng)體系
1、坐標(biāo)方向介紹:
在turtle畫筆坐標(biāo)系中,小海龜默認(rèn)朝向正右方,即X軸正方向,為0度方向,逆時(shí)針向左側(cè)方向旋轉(zhuǎn),直到旋轉(zhuǎn)一周,表示0~360度;順時(shí)針向右側(cè)方向旋轉(zhuǎn),角度是負(fù)數(shù)。這跟數(shù)學(xué)平面直角坐標(biāo)系的角度方向是一致的。

2、相關(guān)函數(shù):
goto(x, y)、setpos(x, y=None)、setposition(x, y=None):讓小海龜移到指定位置;
setx(x):設(shè)定小海龜?shù)膞坐標(biāo)位置;
sety(y):設(shè)定小海龜?shù)膟坐標(biāo)位置;
home():讓小海龜回到原點(diǎn)(0, 0)位置,方向回到初始方向;
forward(distance)、fd(distance):讓小海龜前進(jìn)一段距離;
backward(distance)、bk(distance)、back(distance):讓小海龜后退一段距離;
speed(speed):返回或設(shè)置畫筆的移動(dòng)速度,速度參數(shù)的取值范圍為0~10之間的整數(shù),最慢是1,隨著數(shù)值增加速度加快,最快是0;
right(angle)、rt(angle):讓小海龜向右轉(zhuǎn)動(dòng)一個(gè)角度;
left(angle)、lt(angle):讓小海龜向左轉(zhuǎn)動(dòng)一個(gè)角度;
setheading(angle)、seth(angle):設(shè)定小海龜面向的方向;
heading():查看小海龜當(dāng)前面向的方向;
dot(size):繪制小圓點(diǎn),size為圓點(diǎn)直徑,可選參數(shù);
circle(radius,?extent=None,?steps=None):繪制圓或圓弧。radius代表半徑,為必填參數(shù),radius為正數(shù)時(shí),逆時(shí)針畫圓,否則順時(shí)針畫圓;extend代表繪制的角度,為可選參數(shù),默認(rèn)為360度,如果想繪制一個(gè)圓弧,改參數(shù)設(shè)定值大于0度且小于360度即可;steps代表繪制圓形或者圓弧需要的步數(shù),即邊數(shù),為可選參數(shù),默認(rèn)系統(tǒng)自己指定。
注意:一個(gè)正圓實(shí)際上是用內(nèi)切正多邊形近似表示的,且的次數(shù)越多,多邊形的邊數(shù)也就越多,正多邊形的邊數(shù)就是steps參數(shù)代表的含義,所以,circle()函數(shù)也可以用來繪制正多邊形。
四、其它需要掌握的函數(shù)
reset():清除小海龜繪制的圖形,小海龜回到原點(diǎn)、并設(shè)置所有變量為默認(rèn)值;
clear():清除小海龜繪制的圖形,小海龜位置及狀態(tài)保持不變;
clone():克隆當(dāng)前小海龜,并返回克隆體;
stamp():印章,在當(dāng)前海龜位置印制一個(gè)海龜形狀,并返回印章id;
clearstamp(stampid):清除印章,stampid為必填參數(shù),代表指定刪除的印章id;
clearstamps(n=None):清除多個(gè)印章,n為可選參數(shù),默認(rèn)為None,表示刪除所有印章;當(dāng)n>0時(shí),刪除前n個(gè)印章,當(dāng)n<0時(shí),刪除后n個(gè)印章;
undo():撤銷操作;
turtle.screensize(canvwidth=None, canvheight=None, bg=None):設(shè)定或返回當(dāng)前畫布的尺寸,三個(gè)參數(shù)均為可選參數(shù),前兩個(gè)參數(shù)用于設(shè)定寬和高,第三個(gè)參數(shù)用于設(shè)定背景顏色,給定參數(shù)表示設(shè)置畫布尺寸,否則返回畫布尺寸;(注意:這是窗口的控制函數(shù),而不是畫筆的。)
turtle.mainloop()、turtle.done():停止畫筆操作,但繪圖窗口不會(huì)關(guān)閉,必須作為海龜程序的最后一句,因?yàn)楹竺娴恼Z(yǔ)句不會(huì)被執(zhí)行。(注意:這是窗口的控制函數(shù),而不是畫筆的。)
五、綜合練習(xí)
1、按照以下要求,繪制如下圖形:

(1)繪制一個(gè)由兩個(gè)直角三角形組成的正方形,邊長(zhǎng)為180像素;
(2)左上三角形填充藍(lán)色,右下三角形填充紅色;
(3)畫筆移動(dòng)速度設(shè)為1,線條為黑色;
(4)畫圖結(jié)束后,隱藏并停止畫筆。
2、按照以下要求,繪制如下圖形:

(1)正方形邊長(zhǎng)為200像素,線條顏色為黑絲;
(2)原點(diǎn)的直徑均為20,填充顏色為紅色,畫完之后隱藏畫筆;
(3)中間原點(diǎn)的圓心位置為畫布正中心,3個(gè)圓心之間的距離均為40。
<完>
