Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 4. 函数
什么樣的程序員才是優秀的程序員?咪博士認為“慵懶”的程序員才是真正優秀的程序員。聽起來不合邏輯?真正優秀的程序員知道如何高效地工作,而不是用不止境的加班來完成工作任務。函數便是程序員高效工作的利器之一。
事實上,在前面的教程中,我們已經在使用函數了。例如,我們在每段代碼的最后,都會調用 turtle.exitonclick() 函數。exitonclick 函數的作用就是讓海龜畫完圖像之后保持住,不要退出,直到我們點擊窗口的時候 (onclick),才退出 (exit)。我們不需要知道函數 exitonclick 具體是怎樣實現的,我們只需要在合適的地方調用它,使用它提供的功能就可以了。使用函數便是程序員高效工作的秘密(之一)。
那么,我們要如何定義自己的函數呢?
Python 中,我們使用 def 關鍵字來定義函數。請看下面這個例子:
1 def line_without_moving(): 2 turtle.forward(100) 3 turtle.backward(100)跟在關鍵字 def 之后的是函數名 line_without_moving。后面,我們就可以用 line_without_moving 這個函數名來調用它了。函數名之后,需要有一個冒號,告訴 python 接下來就是函數的具體內容(稱為函數體)。
函數的功能就是通過函數體中的語句來實現的。注意到,函數體中的語句 (第2, 3 行) 和 def 所在的行 (第 1 行) 相比,要往右縮進了一些。Python 正是通過縮進來判斷哪些語句是屬于函數體中的語句(類似前面教程中談到的,Python 用縮進來判斷哪些語句屬于循環體)。通常,我們用 4 個空格符來表示一級的縮進。
好了,讓我們仔細看看 line_without_moving 的函數體(第 2, 3 行),看看這個函數實現的是什么功能? turtle.forward(100) 前進 100 個單位距離, turtle.backward(100) 后退 100 個單位的距離,這一進一退,小海龜又回到了原來的位置,這不等于啥也沒干嗎?No No No!海龜雖然又回到的原來的位置,但它在爬行過程中,會在屏幕上留下痕跡,即畫出線條。因此,line_without_moving 這個函數的作用就是讓海龜沿著當前方向繪制一條長度為 100 個單位的線條,然后還要回到起始的位置,同時保持龜頭的方向不變。
上面的代碼,僅僅是定義了函數 line_without_moving。光定義函數是看不到直接的效果的,函數需要被使用(即被調用),函數體中的代碼才能被執行,我們才能看到效果。例如,下面的代碼,我們在 line_without_moving 函數定義之后,調用了它(第 7, 9, 11, 13 行)。調用方式為函數名之后,跟一個小括號。這樣,我們就能看到函數調用之后的效果了。
1 import turtle 2 3 def line_without_moving(): 4 turtle.forward(100) 5 turtle.backward(100) 6 7 line_without_moving() 8 turtle.right(90) 9 line_without_moving() 10 turtle.right(90) 11 line_without_moving() 12 turtle.right(90) 13 line_without_moving() 14 15 turtle.exitonclick()運行上面的代碼,我們可以看到一個十字型的圖案。
類似循環可以嵌套一樣,函數也可以嵌套。上面畫十字型的代碼,還可以改寫成下面的形式。
1 import turtle 2 3 def line_without_moving(): 4 turtle.forward(100) 5 turtle.backward(100) 6 7 def draw_cross(): 8 line_without_moving() 9 turtle.right(90) 10 line_without_moving() 11 turtle.right(90) 12 line_without_moving() 13 turtle.right(90) 14 line_without_moving() 15 16 draw_cross() 17 18 turtle.exitonclick()第 7-14 行,定義了一個新的函數 draw_cross。第 16 行,調用 draw_cross 函數畫十字,而 draw_cross 函數內部又調用了 line_without_moving 函數(第? 8, 10, 12, 14 行),即函數嵌套函數。
進一步觀察,我們發現 8-14 行的代碼有許多是重復的。第 8, 9 行的代碼,重復了 4 次。結合前面咪博士講的循環,聰明的你是不是已經想到了如何進一步簡化代碼了呢?下面是咪博士給出的參考代碼,是不是和你想的一樣呢?
1 import turtle 2 3 def line_without_moving(): 4 turtle.forward(100) 5 turtle.backward(100) 6 7 def draw_cross(): 8 for i in range(4): 9 line_without_moving() 10 turtle.right(90) 11 12 draw_cross() 13 14 turtle.exitonclick()【練習】
嘗試編寫函數繪制出蜂窩的圖案
【提示】
- 蜂窩是由一系列的正六邊形構成的,先編寫一個繪制正六邊的函數,再通過多次函數調用的方式繪制出多個正六邊形
- 設計正六邊形函數的時候,要讓海龜在畫完正六邊形之后,再次回到起始的位置,并保持龜頭方向不變,這樣方便我們拼接多個正六邊形構成蜂窩的圖案
- 在考慮如何用多個正六邊形構成蜂窩時,請忽略繪制正六邊形的細節(請忘記龜頭轉了幾度,海龜前進了多少距離等細節 ),只需要知道海龜在繪制單個正六邊形時的旋轉方向(順時針還是逆時針),并且海龜在繪制正六邊形之后,會回到起始的位置,并保持龜頭方向不變
- 在函數調用時忽略函數內部的細節,這事實上就是一種抽象的思維,函數不僅是程序員“偷懶”的工具,更是程序員通過抽象思維,實現復雜邏輯的利器
原文鏈接:http://www.ipaomi.com/2017/11/20/python-零基礎-快速入門-趣味教程-咪博士-海龜繪圖-turtle-4-函/
轉載于:https://www.cnblogs.com/ipaomi/p/7878087.html
總結
以上是生活随笔為你收集整理的Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 4. 函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我的车是一汽丰田的卡罗拉,之前停车时不小
- 下一篇: 车上km/h踩油门才显示