官术网_书友最值得收藏!

2.3 編程知識點

(1)函數setheading()和forward()

我們知道,線段是兩個點之間的連線。知道兩個點的坐標,自然可以畫出這條線段來。從前面的介紹可以得知,如果畫筆在起點位置,用函數goto()可以畫出這條線段。

假若,現在我們只知道起點的位置、線段的長度,以及與橫軸正向的夾角,能否畫出這條線段來呢?從相關幾何知識可知,這樣的線段也是可以畫出來的。

在Python的turtle庫里,設置畫筆朝向的函數是setheading(),括弧里的參數為畫筆的角度。角度是以橫軸正向為0°,逆時針旋轉為正,順時針旋轉為負。前移畫筆一定長度的函數是forward(),括弧里參數是畫筆前移的像素值。

如圖2-4所示,畫AB線段,可以讓在A點的畫筆通過使用goto(20,20)移動到B點,也可以在A點設置畫筆的朝向為45°,然后前移AB線段的長度。根據勾股定理,從點(0,0)到點(20,20)的AB線段長約為28像素。

圖2-4 AB線段的畫法

turtle畫筆的初始位置在原點(0,0),線段的兩種畫法的程序代碼如圖2-5所示,左圖是已知線段另外一點的坐標是(20,20)的畫法;右圖是已知線段與橫軸的夾角是45°,長度為28像素的畫法。兩種方法畫出來的線段是一樣的。

圖2-5 線段的兩種畫法的程序代碼

(2)函數pensize()和pencolor()

在幾何知識中,線段是有長度和方向的,且由兩個端點的位置決定,沒有寬度和顏色的概念。但在turtle畫圖中,線段還有寬度和顏色的屬性。可以用函數pensize()指定畫筆的寬度,單位是像素,用函數pencolor()指定畫筆的顏色。畫不同寬度和不同顏色的4條線段的程序代碼如圖2-6所示。程序運行結果如圖2-7所示。

圖2-6 畫不同寬度和不同顏色的4條線段的程序代碼

圖2-7 程序運行結果:畫四條線段

(3)函數hideturtle()和showturtle()

在前面用turtle畫圖的例子中,程序運行完成后,總有一個黑色箭頭留在畫面上,這是畫筆最后的位置和朝向的指示。在設計不需要顯示畫筆的圖形時,可以使用函數hideturtle()來隱藏。如果需要顯示已經隱藏的畫筆,可以使用函數showturtle()完成。

如圖2-8所示的程序代碼,開始隱藏畫筆,也就是在畫前兩條線段時是看不到畫筆形狀的,畫完兩條線段后,顯示畫筆;在畫最后兩條線段的過程中,可以看到畫筆的形狀;在整個圖畫完后,再隱藏畫筆。程序運行結果如圖2-9所示。

圖2-8 隱藏和顯示畫筆的程序代碼

圖2-9 程序運行結果:隱藏畫筆

(4)顏色列表

列表是Python中一種特殊的數據序列。列表中的每個元素可以是Python的各種數據類型。元素放在方括號內,用逗號分隔。列表中的第一個索引(元素)是0,第二個索引是1,依此類推。

為了生成五顏六色的圖形,我們選用6種顏色,組成顏色列表colors,如圖2-10所示。

圖2-10 顏色列表的程序代碼

舉例來說,如圖2-11所示,從原點(0,0)出發,畫36條各種顏色的線。線的寬度為5像素,線條之間的夾角為360°/36=10°,即第i條線與橫軸正向的夾角為(10×i)°,畫筆的方向設置為setheading(10×i)。

圖2-11 畫從原點出發的36條各種顏色線條的程序代碼

線的顏色從下面顏色列表中取得。

假設顏色列表中有6種顏色,每畫6條線,顏色重復一次。循環畫36條線,我們用i%6(循環變量i對6取余)來做顏色索引。

每畫完一條線,都要抬筆,用函數goto(0,0)使畫筆回到原點,然后落筆,再用函數forward()畫下一條線。

程序運行結果如圖2-12所示。

圖2-12 程序運行結果:各種顏色的線條

(5)嵌套循環

在一個循環語句中包含另一個循環語句,叫做嵌套循環。嵌套循環是編程語言中常見的邏輯結構。那么嵌套循環在畫圖的過程中有什么用呢?前面我們用一層for循環畫了36條線。如果想在每條線的末端再畫三個點,就需要使用嵌套循環來解決了。嵌套循環在畫圖中完成的是兩個不同維度的循環要求。程序代碼如圖2-13所示。程序運行結果如圖2-14所示。

圖2-13 使用嵌套循環畫圖的程序代碼

圖2-14 程序運行結果:線加點圖形

(6)條件判斷

如果在特定的位置上,在不同的條件下需要用畫筆畫不同的圖形,這需要進行條件判斷,不同的條件下運行不同的畫圖程序代碼。在計算機編程語言中,條件判斷是一種常用的邏輯結構,是依據給定的邏輯運算結果(True或False),執行相應代碼的程序結構。

兩個分支的條件判斷結構如下:

三個以上分支的條件判斷結構,需要在兩個分支的條件判斷結構中,使用elif來增加新的條件分支,結構如下:

如圖2-15所示,這段代碼顯示了條件判斷語句的作用。首先,從Python的Shell上獲取用戶的選擇。如果用戶選擇1,即if(choice==1),畫一個100像素的紅點;如果用戶選擇其他,即else,畫一個100像素的藍點。

圖2-15 條件判斷示例程序代碼

主站蜘蛛池模板: 丘北县| 武宣县| 观塘区| 白河县| 沅陵县| 思南县| 团风县| 进贤县| 庄河市| 桓台县| 宁乡县| 吴桥县| 塔河县| 改则县| 塔河县| 武强县| 丰城市| 马公市| 乐昌市| 右玉县| 松滋市| 固阳县| 合阳县| 通山县| 岗巴县| 霍山县| 黔东| 屏山县| 郎溪县| 乌鲁木齐市| 安庆市| 庆城县| 浑源县| 宣恩县| 三江| 祁阳县| 天峨县| 永登县| 巩留县| 武安市| 安远县|