Exercise: Little Turtle

From ITRS
Jump to: navigation, search

烏龜幾何與遞迴

Turtle Graphics Using Python

啟動 Python 互動環境後,首先載入函式庫,使你可以使用這個程式

from turtle import forward, right, reset

forward(x)代表令turtle前進 x 單位

forward(100)

right(y)代表令turtle右轉y度,同樣有left(z)代表令turtle左轉z度

right(90)

接著我們利用這些指令畫出一個正方形

forward(100)
right(90)
forward(100)
right(90)
forward(100)

完成啦!

挑戰:正12邊型

提示;外角 畫面很亂? 使用reset()使turtle歸位並清除軌跡

reset()

函式

手打字打的酸了嗎?我們可以利用一個名字較短的函式來取代重複的文字。

def func():
   print hello

代表定義一個名為func的函式,下面的print hello就是函式的內容,前面記得縮排喔! 應用:

def a():
   forward(100)
def b():
   right(150)

試試看

a()
b()
a()
b()
...

另外,我們還可以更進階,用一個變數來代表傳入值,就像數學函數一樣,f(x)=...

def a(x):
   forward(x)
def b(x):
   right(x)

試試看

a(100)
b(90)
a(100)
b(90)

挑戰:劃圓

這裡教你一個回圈的概念。所謂迴圈就是一個可以節省以重複打a() b() a() b() ...的東西。與法如下

for i in range(12):
   a(100)
   b(30)

表示把縮排的內容執行12次。方便吧! 想想看,如何畫出圓形? 提示:近似

不要看解答

for i in range(25):
    forward(5)
    right(360/25)
</span>

</pre>

自動畫出多邊形

def poly

  • itrs.py
from turtle import forward, right, reset

def repeat(n, func):
    for i in xrange(n):
        func()

def make_forward_right(length, angle):
    def fr():
        forward(length)
        right(angle)
    return fr

make_fr = make_forward_right
  • star.py
def star(n, m, l):
    repeat(n, make_fr(l, 360.0*m/n))

def poly(n, l):
    star(n, 1, l)

def circle():
    poly(200, 1)

自動畫出多邊形

def poly

  • itrs.py
from turtle import forward, right, reset

def repeat(n, func):
    for i in xrange(n):
        func()

def make_forward_right(length, angle):
    def fr():
        forward(length)
        right(angle)
    return fr

make_fr = make_forward_right
  • star.py
def star(n, m, l):
    repeat(n, make_fr(l, 360.0*m/n))

def poly(n, l):
    star(n, 1, l)

def circle():
    poly(200, 1)

See Also

Comments

blog comments powered by Disqus