Upgrade to Pro — share decks privately, control downloads, hide ads and more …

TurtleGraphicsInPython.pdf

Renyuan Lyu
November 13, 2014
1.6k

 TurtleGraphicsInPython.pdf

Renyuan Lyu

November 13, 2014
Tweet

Transcript

  1. turtle in Python IDLE Help • 從 Python 3.4.2 以後,turtle

    模組 已經被提 昇至 Python IDLE Help 的一部份了,可見得 其重要性已得到 Python 官方認證。 2
  2. 01: 由 # 開頭,是註解行,python直譯器會忽略它。 02~12: 由 ””” 起始,””” 結束,是跨行註解符號, 其間文字python直譯器會忽略它。

    14: 從 turtle 模組 (turtle.py) 引入其所提供的所有軟體元件, 包含物類、函數以及全域變數。 16~38: 本程式的自訂函數之一,名為 yin(), 傳入 radius, color1, color2三個引數, yin() 函數會執行一系列的龜畫圖動作, 恰好構成陰陽太極圖的一半, 名為 yin 恰是中文字「陰」的發音。 40~45: 本程式的自訂函數之一,名為 main(), 程式師想將它作為本程式的主要函數, 其描述了本程式的主要執行流程。 47~49: 行47 偵測本程式是直接作為主程式被執行, 抑或被其他主程式呼叫, 若是前者,__name__ 內建變數值會等於 ‘__main__’ , 於是,行48 會接下去自動執行。亦即前述 main() 函數就開始執行。 最後,行49 mainloop() 是 turtle 模組常用的 進入圖形介面 專用函數。 他允許你運用滑鼠鍵盤等輸入設備在繪圖視窗中操作。 比如說,你可以用滑鼠左鍵點擊繪圖視窗的結束鈕來結束繪圖視窗。 4
  3. 16: 定義本函數之名稱為 yin(),可傳入的引數為radius, color1, color2,分 別是半徑、主色、副色。 17: 龜之畫線筆寬設為 3。 18:

    龜之畫線筆色設為 ”black” (黑色),龜本身及欲填滿區域之顏色設為 color1。 19: 設定於區域中填滿顏色之起始點。 20: 以 radius/2 為半徑,逆時針畫半圓(因為角度設定為180度之故)。 21: 以 radius 為半徑,逆時針畫半圓。 22: 龜向左自轉(逆時針)180度。 23: 以 radius/2 為半徑,順時針畫半圓(因為半徑有負號,故為順時針)。 24: 設定於區域中填滿顏色之結束點。 25: 龜向左自轉90度。 26: 龜提起筆(以下動作將不畫圖於螢幕)。 27: 龜前進 radius*0.35 (大約是 radius 的 1/3)。 28: 龜向右自轉90度。 29: 龜放下筆(以下動作將重新畫圖於螢幕)。 30: 龜之畫線筆色設為 color1 ,龜本身及欲填滿區域之顏色設為 color2。 31: 設定於區域中填滿顏色之起始點。 32: 以 radius * 0.15 為半徑(大約是 radius 的 1/6),逆時針畫全圓(因為沒 設定角度,預設為360度)。 33: 設定於區域中填滿顏色之結束點。 34: 龜向左自轉90度。 35: 龜提起筆。 36: 龜後退 radius*0.35 ,本行與 27行相搭配 。 37: 龜放下筆。 38: 龜向左自轉90度。 5
  4. 6 40: 定義 函數名為 main(),沒有傳入任何引數。本函數將作為本程式 之主要執行流程,main 本意就是「主要」的意思。 41: 重新設定所有龜繪圖的內部參數,如同機器被重新開機一樣。 42:

    呼叫 前面所述的自訂函數 yin(),傳入 radius= 200,主色 為”black”(黑色),副色為”white”(白色)。 43: 再次呼叫 yin() 函數,但主色及副色互換(黑白互換)。 44: ht() 是 hiddenturtle() 的別名函數,用來隱藏龜的形狀。 45: main() 做完後,回傳 "Done!" 字串,在本程式中沒有用到它。 47: 通常一個 python 程式可以自己被當成「主程式」在 python 直譯 器中被執行,若是如此,則該程式執行時有個內建全域變數 __name__,其值為 ‘__main__’,但有時候,一個 python 程式 只是被其他程式呼叫,用來提供函數給其他程式使用,這時該 被呼叫的程式之 __name__ 就不為 '__main__',而是該被呼叫程 式的模組名(通常是該程式自己的檔名,去掉 .py )。因此,行47 常被用來當本程式的主函數真正的進入點,而且使得本程式不 被當主程式執行,而僅是要當作其他程式輔助時,亦可以直接 使用。 48: 呼叫 main() 函數,本程式的主函數。執行龜畫陰陽太極的主 要動作。 49: mainloop() 是 龜畫圖函數庫中常用的 圖形使用者介面(GUI) 無窮 迴圈(infinite loop)函數,它把程式主控權由電腦轉到使用者手上, 使用者藉由滑鼠、鍵盤等,可以開始操控龜畫圖視窗 。不過在 本程式中,程式師並沒有去設計這部分的功能,因此只有預設 的「滑鼠點擊視窗結束按鈕」可供使用者使用。你可以試試看。 本程式若刪除這一行亦無任何影響。未來,當我們要設計更多 滑鼠、鍵盤功能給使用者時,這一行才變得必要。
  5. Overview of available Turtle and Screen methods • https://docs.python.org/3.4/library/turtle.html 7

    Turtle motion Move and draw forward() | fd() backward() | bk() | back() right() | rt() left() | lt() goto() | setpos() | setposition() setx() sety() setheading() | seth() home() circle() dot() stamp() clearstamp() clearstamps() undo() speed() Pen control Drawing state pendown() | pd() | down() penup() | pu() | up() pensize() | width() pen() isdown() Color control color() pencolor() fillcolor()
  6. turtledemo — Demo scripts Name Description Features bytedesign complex classical

    turtle graphics pattern tracer(), delay, update() minimal_hanoi Towers of Hanoi Rectangular Turtles as Hanoi discs (shape, shapesize) planet_and_moon simulation of gravitational system compound shapes, Vec2D tree a (graphical) breadth first tree (using generators) clone() yingyang another elementary example circle() 8
  7. Read the programs, and modify it to learn http://rycodingclub.blogspot.tw/2014/11/turtle-graphics-yinyang.html http://rycodingclub.blogspot.tw/2014/11/turtle-graphics-tree.html

    http://rycodingclub.blogspot.tw/2014/11/blog-post.html 9 你可以在上述網址看到 3 個呂老師的例子。 請你自己也找3個來改。 改完後,post 上 blogspot。 告訴我連結。 在我的 ryTeach.blogspot.com 網頁上登錄。 You can find 3 examples in the above http link. Please find 3 most interesting examples to modify. Your programs should be post on blogspot. and tell me your link by posting it on my ryTeach.blogspot.com
  8. 10

  9. 11

  10. 12