上一個(gè)教程中向挖,咪博士帶大家學(xué)習(xí)了函數(shù)的使用。例如炕舵,line_without_moving 函數(shù)何之,可以讓海龜先畫出一條線段,然后再回來(lái)起點(diǎn)咽筋。
def line_without_moving():
turtle.forward(100)
turtle.backward(100)
但是溶推,這個(gè)函數(shù)還是有一些局限性的。譬如奸攻,海龜所畫線段的長(zhǎng)度是固定的蒜危,這樣就顯得不夠靈活。那么有什么辦法睹耐,讓函數(shù)變得更靈活一些呢辐赞?答案就是使用參數(shù)。
def line_without_moving(length):
turtle.forward(length)
turtle.backward(length)
對(duì)比前后 2 段代碼硝训,新版的 line_without_moving 在函數(shù)聲明的地方(第 1 行)响委,在小括號(hào)里面寫上了 length新思;又將函數(shù)體中(第 2, 3 行)的數(shù)字 100 替換成 length。這里的 length 就稱為函數(shù)的參數(shù)晃酒,我們?cè)诤瘮?shù)調(diào)用時(shí),可以向函數(shù)參數(shù)傳遞不同的值窄绒,這樣函數(shù)體中用到 length 參數(shù)的地方贝次,也就間接地用到我們提供的值啦。
import turtle
def line_without_moving(length):
turtle.forward(length)
turtle.backward(length)
line_without_moving(100)
turtle.right(90)
line_without_moving(150)
turtle.right(90)
line_without_moving(200)
turtle.right(90)
line_without_moving(250)
turtle.exitonclick()
運(yùn)行上面這段畫十字型的代碼彰导,我們看到構(gòu)成十字型的 4 條線段長(zhǎng)短不一蛔翅。這是因?yàn)槲覀冊(cè)谡{(diào)用 line_without_moving 函數(shù)時(shí),使用了不同的參數(shù)(第 9, 11, 13, 15 行)位谋。
關(guān)于函數(shù)參數(shù)山析,咪博士要提醒大家的是,函數(shù)參數(shù)只能在本函數(shù)內(nèi)部(即本函數(shù)體中)使用掏父。函數(shù)之外笋轨,函數(shù)參數(shù)就無(wú)效了。例如赊淑,函數(shù) line_without_moving 的參數(shù) length 就只能在 line_without_moving 函數(shù)中使用爵政,你不能在其他的地方使用它。
還記得上個(gè)教程中陶缺,咪博士給大家留的那個(gè)畫蜂巢的作業(yè)嗎钾挟?聰明的你,是不是已經(jīng)畫出來(lái)了呢饱岸?
下面是咪博士的代碼掺出,代大家參考。
import turtle
def hexagon():
for i in range(6):
turtle.forward(50)
turtle.left(60)
def honeycomb():
for i in range (6):
hexagon()
turtle.forward(50)
turtle.right(60)
honeycomb()
turtle.exitonclick()
現(xiàn)在苫费,蜂巢的大小的固定的汤锨。使用這節(jié)課的知識(shí),通過(guò)函數(shù)參數(shù)百框,我們可以很方便地控制蜂巢的大小泥畅。
下面是咪博士改進(jìn)后的代碼。通過(guò)參數(shù) size琅翻,我們可以自由地控制蜂巢的大小位仁。
import turtle
def hexagon(size):
for i in range(6):
turtle.forward(size)
turtle.left(60)
def honeycomb(size):
for i in range (6):
hexagon(size)
turtle.forward(size)
turtle.right(60)
honeycomb(80)
turtle.exitonclick()
這里我們將六邊形的邊長(zhǎng)(參數(shù) size)設(shè)置為 80,讓蜂巢變得更大一些方椎。
參數(shù)的傳遞過(guò)程如下:
- 第 14 行聂抢,我們?cè)谡{(diào)用函數(shù) honeycomb 時(shí),將 80 傳遞給了 honeycomb 的參數(shù) size
- 函數(shù) honeycomb 接受了 80 這個(gè)參數(shù)值(第 8 行)棠众,因此函數(shù) honeycomb 中琳疏,所有使用到參數(shù) size 的地方(第 10, 11 行)有决,都得到了 80 這個(gè)值
- 函數(shù) honeycomb 中,又將 80 這個(gè)值傳遞給被調(diào)用的函數(shù)空盼,第 10 傳遞給函數(shù) hexagon, 第 11 行傳遞給函數(shù) turtle.forward
- 函數(shù) hexagon 接受了 80 個(gè)參數(shù)值(第 3 行)书幕,因此函數(shù) hexagon 中,所有使用到參數(shù) size 的地方(第 5 行)揽趾,都得到了 80 這個(gè)值
- ……
這里台汇,咪博士要提醒大家的是:函數(shù) hexagon 和 honeycomb 中都有參數(shù) size,這 2 個(gè) size 雖然同名篱瞎,而且在參數(shù)傳遞的過(guò)程中苟呐,都被賦予相同的值(80),但它們不是同一個(gè)參數(shù)俐筋!hexagon 中的參數(shù) size牵素,其作用域(即有效范圍)是第 3-6 行;honeycomb 中的參數(shù) size澄者,其作用域是第 8-12 行笆呆。
【練習(xí)】
嘗試編寫一個(gè)帶參數(shù)的函數(shù),實(shí)現(xiàn)任意正多邊形的繪制
【提示】
- 設(shè)計(jì)一個(gè)名為 draw_polygon 的函數(shù)來(lái)繪制任意正多邊形
- draw_polygon 接受 2 個(gè)參數(shù) sides 和 length(多個(gè)參數(shù)之間用英文逗號(hào)分隔)
- sides 用于控制正多邊形的邊數(shù)(內(nèi)角)
- length 用于控制正多邊的邊長(zhǎng)(大辛坏病)
def draw_polygon(sides, length):
pass
原文鏈接:http://www.ipaomi.com/2017/11/22/python-零基礎(chǔ)-快速入門-趣味教程-咪博士-海龜繪圖-turtle-5-參/