教孩子用Python編程,手把手教你海龜繪圖,一學就會

海龜繪圖

在前面幾章中,我們學習了Python編程中要用到的一些基本概念。從本章開始,我們將嘗試圖形用戶界面(GUI)程序的編寫。Python標準庫中包含了支持圖形繪製的模塊,我們利用這些模塊來繪製圖形。

首先,我們要了解一下什麼是模塊。

12.1 模塊

12.1.1 什麼是模塊

Python中的模塊(module)就是一個Python文件,以.py結尾,包含了 Python 對象的定義和Python語句。模塊能夠更有邏輯地組織Python代碼段。把相關的代碼分配到一個模塊裡,能夠讓代碼更好用,更易懂。模塊可以用來定義函數、類和變量,模塊之中也能夠包含可執行的代碼。

當安裝Python的時候,就有不少模塊也隨之安裝到本地的計算機上了,我們可以免費使用這些模塊。而這些在安裝Python時就默認已經安裝好的模塊統稱為“標準庫”。

我們可以使用 import 語句來導入模塊。當解釋器遇到 import 語句的時候,如果跟在import語句後面的模塊在當前的搜索路徑中,就會被導入。不管你執行了多少次import語句,一個模塊只會被導入一次,這樣可以防止一遍又一遍地執行導入模塊操作。

12.1.2 導入模塊

Python中有兩種常用的導入模塊的方法,我們先來看第一種。

如果使用這種導入方式,當我們引用模塊中的方法時,要在方法名稱前加上 “module_name.”前綴。來看一個簡單的示例。

這兩行代碼中,第1句就是導入模塊,第2句是調用模塊中的forward()方法。

再來看看第二種導入模塊的方法。

使用這種方法可以導入module_name模塊中所有的方法和變量,當需要調用方法時,直接寫方法名稱就可以,不需要再加“module_name.”前綴。我們改寫一下前面的示例。

那麼,什麼時候應該使用第一種方法,什麼時候使用第二種方法呢?如果你想要有選擇地導入某些屬性和方法,而又不想要其他的屬性和方法,就應該使用第一種方法。如果模塊包含的屬性和方法與你自己的某個模塊同名,那麼必須使用第一種方法來避免名字衝突。

如果想要經常訪問模塊的屬性和方法,並且不想一遍又一遍地敲入模塊名,而且在導入的多個模塊中不會存在相同名稱的屬性和方法,那麼就可以使用第二種方法,我們會在下一章中使用第二種方法導入模塊。

12.2 turtle模塊

Python標準庫中有個turtle模塊,俗稱海龜繪圖,它提供了一些簡單的繪圖工具,可以在標準的應用程序窗口中繪製各種圖形。

turtle的繪圖方式非常簡單直觀,就像一隻尾巴上蘸著顏料的小海龜在電腦屏幕上爬行,隨著它的移動就能畫出線條來。使用海龜繪圖,我們只用幾行代碼就能夠創建出令人印象深刻的視覺效果,而且還可以跟隨海龜的移動軌跡,看到每行代碼是如何影響它的移動的。這能夠幫助我們更好地理解代碼的邏輯。所以海龜繪圖也經常用作新手學習Python的一種工具。

12.2.1 創建畫布

我們來看看海龜是如何工作的。首先,我們要導入turtle模塊。然後我們要創建空白的窗口作為畫布,窗口的大小是800個像素的寬度和800個像素的高度。然後創建一枝畫筆,並且將光標的形狀設置為一隻海龜。代碼請參見ch12\\12.1.py。

運行這段代碼,我們可以看到一個空白的窗口,中間有一個小海龜,如圖12-1所示。

教孩子用Python編程,手把手教你海龜繪圖,一學就會

圖12-1

turtle程序窗口的繪圖區域使用直角座標系,可以使用X座標和Y座標組成的一個座標系統,將舞臺映射為一個邏輯網格。我們設置窗口的大小是寬和高都是800個像素。X軸的座標從−400到400,而Y軸的座標也是從−400到400。海龜的初始位置在窗口的繪圖區域的正中央(0,0),頭朝X軸的正方向,如圖12-2所示。

教孩子用Python編程,手把手教你海龜繪圖,一學就會

圖12-2

提示 一個像素就是屏幕上的一個點,也就是可以表現出的最小元素。我們在屏幕上看到的所有東西都是由像素組成的。

12.2.2 移動海龜

接下來,我們想讓海龜移動起來。控制海龜移動有很多命令,我們先來看一條簡單的命令,用forward()方法讓海龜向前移動100個像素:

forward就是讓海龜向前移動的命令,100是移動的距離。讓海龜向後移動的命令是backward,括號中的參數是移動距離,以像素為單位。另外,我們還可以讓海龜改變方向。命令left是向左轉,命令right是向右轉,這時候,括號中的參數表示要旋轉的角度。

我們來看一個示例,讓海龜畫一個正方形,代碼請參見ch12\\12.2.py。

運行這段代碼,可以看到海龜畫出了一個方塊,並且方向朝下,如圖12-3所示。

教孩子用Python編程,手把手教你海龜繪圖,一學就會

圖12-3

你也許會感到好奇,雖然是叫海龜繪圖,可是我們並沒有看到海龜的蹤跡呀。這是因為,默認情況下,光標是個箭頭,如果想看到這隻可愛的小海龜,需要調用shape()方法,並且把“turtle”作為參數傳遞給該方法。另外,還可以調用setheading()來設置小烏龜啟動時運動的方向,其參數是個數字,表示要旋轉的角度。我們來看一個示例,代碼請參見ch12\\12.3.py。

在段代碼中,我們先將光標改為小烏龜,然後畫一條直線,接下來讓小烏龜調個頭,最終的效果如圖12-4所示。

教孩子用Python編程,手把手教你海龜繪圖,一學就會

圖12-4

還有一個home()方法,它表示讓小海龜回到初始畫筆的位置。我們在剛才的代碼後面,增加一句turtle.home(),代碼請參見ch12\\12.4.py。

那麼最終的結果就是,小海龜又回到了初始的位置,如圖12-5所示。

教孩子用Python編程,手把手教你海龜繪圖,一學就會

圖12-5

小海龜除了可以畫直線,還可以繪製圓形和弧形。我們使用circle()函數來按照給定的半徑畫圓,這個函數有3個參數,分別是:

radius:半徑,正數表示所畫的圓的圓心在畫筆的左邊,負數表示所畫的圓的圓心在畫筆的右邊;

extent:弧度,這是一個可選的參數,如果沒有指定值,表示畫圓;

steps:做半徑為radius的圓的內切正多邊形,多邊形邊數為steps。這也是一個可選的參數。

我們試著畫一個圓,看一下效果,代碼請參見ch12\\12.5.py。

得到的圖形如圖12-6所示。

教孩子用Python編程,手把手教你海龜繪圖,一學就會

圖12-6

還有兩個經常用到的和移動有關的方法:

  • turtle.goto(x,y)可以把畫筆定位到指定的座標;
  • turtle.speed(speed)可以修改畫筆運行的速度。

下面,我們來嘗試繪製一個風箏。先通過goto()方法畫一條線,表示風箏線,並且將光標移動到左上角。然後指定海龜運行速度為2。接下來,利用前面介紹過的for循環,繪製風箏頭。代碼請參見ch12\\12.6.py。

得到的結果如圖12-7所示。

教孩子用Python編程,手把手教你海龜繪圖,一學就會

圖12-7

12.2.3 畫筆控制

我們可以控制畫筆的起筆和落筆,以決定是否在屏幕上留下運動的軌跡。當調用penup()方法,表示起筆,在此狀態下不會畫出運動的軌跡;當調用pendown()方法,表示落筆,在此狀態下會畫出運動的軌跡。我們可以這麼理解,海龜拿了一支筆,這隻筆或朝上或朝下,當筆朝上時,海龜在移動過程中什麼也不畫,當筆朝下時,海龜用筆畫下自己的軌跡。

我們把剛才繪製風箏的代碼稍作修改,現在,在畫布的中央及上、下、左、右4個角,繪製出5個類似的風箏頭,並且將繪製的速度提高到10。代碼參見ch12\\12.7.py。

得到的圖形如圖12-8所示。

教孩子用Python編程,手把手教你海龜繪圖,一學就會

圖12-8

12.2.4 色彩

海龜繪圖並不是只能夠用黑色畫筆繪圖,還可以使用其他顏色畫筆,甚至可以為圖形填充顏色。下面我們來介紹幾個和顏色相關的函數。

  • pencolor:設置畫筆顏色;
  • fillcolor:設置填充顏色;
  • begin_fill:填充形狀前調用;
  • end_fill:填充形狀後調用。

提示 光線有3 種主要的顏色:紅色、綠色和藍色(紅色、藍色和黃色是繪畫和顏料的主要顏色,但是計算機顯示器使用的是光,而不是顏料)。通過將這3種顏色的不同的量組合起來,可以形成任何其他的顏色。在Pygame中,我們使用3個整數的元組來表示顏色。元組中的第1個值,表示顏色中有多少紅色。為0的整數值表示該顏色中沒有紅色,而255表示該顏色中的紅色達到最大值。第2個值表示綠色,而第3個值表示藍色。這些用來表示一種顏色的3個整數的元組,通常稱為RGB 值(RGB value)。

由於我們可以針對3種主要的顏色使用0~255的任何組合,這就意味著Pygame可以繪製16 777 216種不同的顏色,即256×256×256種顏色。然而,如果試圖使用大於255的值或負值,將會得到類似“ValueError: invalid color argument”的一個錯誤。

例如,我們創建元組(0, 0, 0)並且將其存儲到一個名為BLACK的變量中。沒有紅色、綠色和藍色的顏色量,最終的顏色是完全的黑色。黑色實際上就是任何顏色值都沒有。元組(255, 255,255)表示紅色、綠色和藍色都達到最大量,最終得到白色。白色是紅色、綠色和藍色的完全的組合。元組(255, 0, 0)表示紅色達到最大量,而沒有綠色和藍色,因此,最終的顏色是紅色。類似的,(0, 255, 0)是綠色,而(0, 0, 255)是藍色。

我們通過一個簡單的示例,來看看如何使用色彩,代碼請參見ch12\\12.8.py。

首先,調用pencolor()方法將畫筆設置為紅色,接著調用fillcolor()方法將填充色設置為綠色。然後調用begin_fill()方法,表示要開始填充。接下來,調用circle()方法繪製圓,畫筆是紅色的,填充是綠色的,半徑為90像素。最後,調用end_fill()方法結束填充。繪製的圖形效果如圖12-9所示。

教孩子用Python編程,手把手教你海龜繪圖,一學就會

教孩子用Python編程,手把手教你海龜繪圖,一學就會

圖12-9

除了可以直接輸入顏色的“英文名稱”(如上面的示例代碼中的red、green),我們還可以直接指定顏色的RGB色彩值。海龜繪圖專門有一個colormode函數用來指定RGB色彩值範圍為0~255的整數或者0~1的小數。當參數是255的時候,表示採用0~255的整數值;當參數是1.0的時候,表示採用0到1的小數值。我們來看一個示例,代碼參見ch12\\12.9.py。

我們兩次調用了colormode()函數,第一次傳給它的參數是255,而後一次調用pencolor()函數就用0到255之間的整數作為參數來表示RGB色彩值,表示畫筆的顏色是粉紅色。然後繪製了一個大圓。接下來我們再次調用colormode()函數,而後一次調用pencolor() 函數就用0到1之間的小數作為參數來表示RGB色彩值,表示畫筆的顏色是棕色。然後繪製了一個小圓。運行代碼,得到的效果如圖12-10所示。

教孩子用Python編程,手把手教你海龜繪圖,一學就會

圖12-10

12.3 小結

從本章開始,我們將嘗試圖形用戶界面(GUI)程序的編寫。

Python標準庫中包含了支持圖形繪製的模塊,我們利用這些模塊來繪製圖形。Python中的模塊(module)就是一個Python文件,以.py結尾,包含了Python對象的定義和Python語句。我們可以使用import語句來導入模塊。

Python標準庫中有個turtle模塊,俗稱海龜繪圖,它提供了一些簡單的繪圖工具,可以在標準的應用程序窗口中繪製各種圖形。我們介紹瞭如何只用幾行代碼就能夠創建出令人印象深刻的視覺效果,而且還可以跟隨海龜的移動軌跡,看到每行代碼是如何影響它的移動軌跡的。

教孩子用Python編程,手把手教你海龜繪圖,一學就會

內容簡介:

Python簡單易學,功能強大,是少兒學習編程的首選語言。本書是少兒學習Python編程的趣味指南,全書共17章,按照由簡到難、逐步深入的方式組織各章內容。本書從認識Python開始,首先介紹了Python的安裝和IDLE的使用,然後依次介紹了變量、數字和字符串、列表、元組和字典、布爾類型等數據類型,以及條件、循環、異常和註釋、函數、面向對象編程、文件操作等基礎知識,並且通過實際案例講解了海龜繪圖、Pygame基礎和遊戲編程,以及Python在自然語言處理方面的應用。 本書精心選取內容,注重難易適度和趣味性,語言通俗易懂,代碼示例豐富。在多章的末尾,還給出了一些練習題並給出瞭解答。本書適合想要學習Python編程基礎的少兒(尤其是10歲以上的孩子)及想要教孩子學習編程的家長閱讀,也適合少兒編程培訓班的老師用作少兒編程培訓的教材。


分享到:


相關文章: