python绘制如下图形、小三角形边长20_在编程中发现数学之美——使用Python小龟绘制多边形...
在使用數(shù)學(xué)知識畫出很酷的各種圖形之前,你需要先學(xué)習(xí)Python編程語言的基礎(chǔ)知識。本文將會帶你熟悉以下編程概念:循環(huán)、變量、函數(shù)、使用小龜模塊繪制圖像。本文假設(shè)你已經(jīng)安裝了Python,如果沒有,歡迎你訪問我的在線編程學(xué)習(xí)網(wǎng)站www.icoding.pub,你可以在編程入門—使用python語言開發(fā)游戲課程中下載Python并學(xué)習(xí)安裝過程和Python基礎(chǔ)操作。本文是在Python編程中發(fā)現(xiàn)數(shù)學(xué)之美的第一章內(nèi)容,其余內(nèi)容會陸續(xù)發(fā)布在www.icoding.pub,歡迎關(guān)注。
小龜模塊
Python的小龜模塊來源于Logo語言。Logo語言發(fā)明于1960年代,目的是使所有人都能夠?qū)W習(xí)編程。Logo語言有可供人機(jī)交互的圖形界面。Python的設(shè)計者對Logo語言的小龜模塊如此喜歡,以至于他們也在Python中設(shè)計了小龜模塊。
在Python的小龜模塊中,你可以控制類似小龜?shù)膱D像,像在游戲中控制一個角色。你需要給小龜清晰明確的指令,指導(dǎo)小龜在屏幕上的動作。因為小龜?shù)倪\動會留下軌跡,我們可以通過控制小龜運動畫出各種圖形。
導(dǎo)入小龜模塊
打開IDLE,新建文件,保存為myturtle.py。使用小龜模塊,你需要首先引入它的函數(shù)。在Python中,函數(shù)是指完成某一功能的可重復(fù)使用的一段代碼。Python中有許多內(nèi)置函數(shù),當(dāng)然你也可以創(chuàng)建自己的函數(shù),我們稱之為自定義函數(shù)。本章中你就將寫自己的自定義函數(shù)。
模塊在Python中指一個文件,這個文件中含有預(yù)定義的函數(shù)和定義,這些函數(shù)和定義你可以在其他程序中使用。小龜模塊在你安裝Python的時候已經(jīng)自動安裝了。
Python中引入模塊的方法有許多,我們使用簡單的一種,在myturtle.py中,輸入以下語句:from turtle import *
from表示我們將從外部的文件中導(dǎo)入某些內(nèi)容。我們在from后輸入要導(dǎo)入的模塊,這里是turtle。我們用import獲取欲導(dǎo)入的內(nèi)容,這里的通配符*表示我們將turtle的內(nèi)容全部引入到當(dāng)前的程序。
移動小龜
現(xiàn)在你已經(jīng)引入了小龜模塊,你可以輸入指令輸入指令移動小龜了。我們將使用foreward()函數(shù)(縮寫為fd)來命令小龜移動一段距離并在后面留下軌跡。注意,forward()是我們從turtle小龜模塊中引入函數(shù)中的其中一個。使小龜移動:foreward(100)
這里,括號中的100表示小龜移動的步數(shù)。在編程語言中,100是傳遞給foreward函數(shù)的參數(shù)。當(dāng)然,你也可以將100改成其它任何值。保存,運行程序,一個新窗口會打開,窗口中心有一個箭頭。
正如你所見,小龜起點為窗口正中,向右移動了100步(100個像素)。注意,默認(rèn)的形狀是一個箭頭,不是烏龜。輸入以下指令變?yōu)闉觚數(shù)男螤?#xff1a;from turtle import *
forward(100)
shape('turtle')
或許你已經(jīng)猜到了,shape()是小龜模塊中定義的另一個函數(shù)。這個函數(shù)讓你可以定義默認(rèn)的箭頭為其他形狀,如圓、方塊。這里,shape()函數(shù)的參數(shù)是字符串'turtle',不是數(shù)字。保存并運行,你會看到箭頭的形狀已經(jīng)變成了小龜。
改變方向
小龜只能在它的方向上向前走。改變方向,你首先必須使用right()或left()函數(shù)讓小龜轉(zhuǎn)一定的角度。修改程序如下:from turtle import *
forward(100)
shape('turtle')
right(45)
forward(150)
你會發(fā)現(xiàn),小龜從窗口中心開始,向前走100步,右轉(zhuǎn)45度,然后向前走了150步。練習(xí)1-1:修改代碼,使小龜?shù)能壽E畫一個正方形。
循環(huán)執(zhí)行代碼
每一種編程語言都有自動重復(fù)執(zhí)行一定次數(shù)的方法。這個功能很重要,因為重復(fù)執(zhí)行避免了你一遍又一遍輸入相同內(nèi)容代碼的麻煩。它還可以幫你避免輸入錯誤,從而保證程序正常運行。
for循環(huán)
Python語言中使用for執(zhí)行循環(huán)代碼。我們用range指明循環(huán)次數(shù)。打開IDLE,新建文件for_loop.py,輸入:for i in range(2):
print('hello')
這里,range()函數(shù)為每一個循環(huán)i創(chuàng)建了一個迭代器。迭代器每次使用會依順序產(chǎn)生新值。括號中的2是傳遞給range()函數(shù)的參數(shù),與前面?zhèn)鬟f給forward()和right()參數(shù)類似。
這個例子中,range(2)創(chuàng)建了一個包括兩個值:0和1的序列。對兩個值中的每一個,for分別執(zhí)行冒號之后的代碼,在這兒是執(zhí)行打印hello。
記住,在所有需要循環(huán)執(zhí)行的代碼(冒號之后的)前按TAB鍵(或4個空格),以使這些代碼有相同的縮進(jìn)。縮進(jìn)告訴Python哪些代碼行在循環(huán)內(nèi)容需要for循環(huán)執(zhí)行。別忘了for語句最后的冒號,它告訴Python下面的代碼是需要循環(huán)執(zhí)行的。保存、運行以上代碼,你會看到輸出兩行hello。
打印兩行hello是因為range(2)創(chuàng)建了包含兩個數(shù)字0和1的序列。這表示for指令逐個訪問序列中的0和1,每次訪問打印hello。我們可以對代碼做如下修改:for i in range(10):
print(i)
保存并運行,結(jié)果是打印了從0到9的10個數(shù)字。
你注意到了嗎?range()函數(shù)的序列是從0開始,到參數(shù)的前一個數(shù)字結(jié)束(這里是9)。上面的代碼的作用可簡述為“對從0到9范圍中的每一個值,打印當(dāng)前的數(shù)字。”for循環(huán)重復(fù)執(zhí)行代碼,直到超出數(shù)字范圍。下面我們在小龜程序中使用for循環(huán)。
使用for循環(huán)畫正方形
上面的練習(xí)1-1中,你面臨的挑戰(zhàn)是使用forward()和right()畫正方形。完成這個任務(wù),你不得不重復(fù)forward(100)和right(90)四次。這不但需要輸入許多代碼,而且輸入過程中還往往出錯。
現(xiàn)在我們有了for循環(huán),就可以省去重復(fù)輸入相同代碼的麻煩了。下面的myturtle.py程序,使用for代替了重復(fù)的forward()和right()語句:from turtle import *
shape('turtle')
for i in range(4):
forward(100)
right(90)
注意,shape('turtle')語句應(yīng)該在import語句后面其他繪畫代碼的前面。for循環(huán)內(nèi)部的兩行代碼告訴小龜,向前100步然后右轉(zhuǎn)90度(想想對小龜來說哪邊是左哪邊是右)。由于正方形有四條邊,我們使用range(4)讓代碼循環(huán)四次,運行代碼的結(jié)果會如下面的圖片:
1_squares.gif
小龜向前100步然后右轉(zhuǎn),重復(fù)了四次,最終回到原來出發(fā)的點。恭喜你,你使用for循環(huán)畫出了正方形。
創(chuàng)建自定義函數(shù)
我們寫了畫正方形的代碼,我們可以使用個小魔術(shù)將代碼保存起來,以后需要畫正方形的時候隨時調(diào)用。每種變成語言都有實現(xiàn)這個功能的方法,在Python里它被成為函數(shù),函數(shù)在編程中非常重要。函數(shù)使代碼精巧并易于維護(hù)修改,將復(fù)雜問題化解為若干函數(shù)的過程中,也有助于你找到解決問題的最佳方法。在前面的代碼中你已經(jīng)使用過Python語言內(nèi)置的函數(shù),現(xiàn)在我們將學(xué)習(xí)怎么創(chuàng)建我們自己的函數(shù)。
定義函數(shù)你需要為它取個名字,可以取任何名字,記住不要與Python語言的關(guān)鍵字相同,如list,range,等等。為函數(shù)命名的時候,最后取個有意義的名字,這樣你調(diào)用的時候能夠方便的想起來。這里我們?yōu)槲覀儺嬚较虻暮瘮?shù)命名為square(),因為我們這個函數(shù)的作用是畫正方形,修改剛才的程序mytutle.py,增加下面內(nèi)容:def square():
for i in range(4):
forward(100)
right(90)
def關(guān)鍵字告訴Python我們正定義一個函數(shù),后面的將會是函數(shù)名字,這兒是square()。別忘了square后面的兩個括號!Python中它們的出現(xiàn)表示現(xiàn)在要處理的是函數(shù)。后面我們將在括號中放數(shù)值,但即使沒有任何數(shù)值,括號也必須要有以讓Python知道這是個函數(shù)。另外,不要忘記函數(shù)定義語句末尾的冒號。注意,函數(shù)內(nèi)容部分的代碼都有向右4個空格的縮進(jìn),這是告訴Python哪些代碼是函數(shù)內(nèi)部的語句。
如果現(xiàn)在運行,什么也不會出現(xiàn)。你定義了函數(shù),但還沒有運行它。要運行函數(shù)你需要調(diào)用它,對代碼繼續(xù)修改,修改后的代碼如下:from turtle import *
shape('turtle')
def square():
for i in range(4):
forward(100)
right(90)
square()
保存,運行。程序的最后一行,通過square()調(diào)用了函數(shù)。現(xiàn)在你可以在程序任何位置調(diào)用square()函數(shù)來方便地繪制四方形了。
你還可以將這個函數(shù)放在循環(huán)中,來繪出更復(fù)雜的圖形。例如,畫一個正方形,右轉(zhuǎn)一定角度,畫另一個正方形,繼續(xù)右轉(zhuǎn)...這樣循環(huán)若干次。
下面的練習(xí)將繪制一個由正方形組成的有趣的圖形。要畫出這個圖形,需要你的小龜忙活一會兒,所以你可以通過調(diào)用speed()函數(shù)控制小龜?shù)乃俣取T趕hape('turtule')語句后面插入一行speed(0),使小龜移動的速度達(dá)到最快(speed(1)使小龜速度最慢)。當(dāng)然你可以調(diào)整speed()的參數(shù)。練習(xí)1-2:正方形組成的圓。寫程序,這個程序?qū)?0個正方形,每畫一個正方形后右轉(zhuǎn)5度。程序中要使用循環(huán)語句。運行結(jié)果如圖:
circle of squares
使用變量繪制圖形
現(xiàn)在為止我們的正方形大小都相同。想要不同大小的正方形,要改變小龜前進(jìn)的距離。要通過每次修改函數(shù)獲得不同的距離,那太麻煩了。我們用變量來解決這個問題,變量在Python中表示可以改變的值。變量與數(shù)學(xué)函數(shù)表達(dá)式中的x相似。
數(shù)學(xué)中的變量名字是一個字母,編程中你可以給變量取任何名字。類似與函數(shù),我建議你的變量名稱應(yīng)該是有意義的,便于記憶和理解。
函數(shù)中使用變量
定義函數(shù)的時候,可以將變量作為傳遞給函數(shù)的參數(shù)。例如,可以修改square()的定義,來畫不同尺寸的正方形,對myturtle.py修改如下:def square(sidelength):
for i in range(4):
forward(sidelength)
right(90)
這里我們在函數(shù)定義中增加了sidelength。現(xiàn)在你調(diào)用這個函數(shù)的時候,要在括號間傳遞一個值給函數(shù),這個值我們稱之為參數(shù)。傳遞的任何值都將作為sidelength的數(shù)值。例如,調(diào)用square(50)和square(80)將分別繪制邊長為50和80的正方形。
變量錯誤
調(diào)用函數(shù)的時候,如果函數(shù)定義中有參數(shù),而調(diào)用時未指明參數(shù),Python會報錯。如調(diào)用上面的函數(shù)square(),IDLE中會出現(xiàn)以下錯誤提示:TypeError: square() missing 1 required positional argument: 'sidelength'
這個錯誤提示我們?nèi)鄙倭艘粋€需要的參數(shù)(這兒是sidelength)。怎樣避免出現(xiàn)這種錯誤呢?我們可以在定義函數(shù)時給參數(shù)賦一個默認(rèn)值,例如這樣:def square(sidelength=100):
這里,我們給sidelength賦值100。現(xiàn)在我們調(diào)用square時如果填寫了參數(shù),會繪制邊長為我們填寫數(shù)值的正方形,如果我們沒有填寫,也不會報錯,會繪制邊長為100的正方形。我們可以這樣調(diào)用函數(shù):square(30)
square(50)
squre()
運行結(jié)果會是這樣:
1_func_params.gif
給函數(shù)參數(shù)設(shè)置缺省值,我們可以不同擔(dān)心調(diào)用時忘記填寫參數(shù)了。在編程中,我們稱之為讓程序變得健壯。練習(xí)1-3:繪制三角形。寫triangle()函數(shù),函數(shù)功能為繪制給定變長的三角形。
等邊三角形
多邊形是有多個邊的圖形。等邊三角形是多邊形的一種,有三條邊且變長相等。
triangle
等邊三角形有3個都為60度的內(nèi)角,你的數(shù)學(xué)老師肯定告訴過你,三角形內(nèi)角和為180度。
寫繪制三角形的函數(shù)
現(xiàn)在,讓我們用目前學(xué)到的知識畫出一個等邊三角形。因為每個內(nèi)角都是60度,我們可以將right()參數(shù)修改為60度,像下面這樣修改myturtle.py:def triangle(sidelength=100):
for i in range(3):
forward(sidelength)
right(60)
triangle()
保存,運行。你看到了什么?
triangle
我們沒看到三角形,看起來畫的好像是六邊形的一半。想想為什么?如果你是圖上的小龜,站在它的位置,向右轉(zhuǎn)60度,循環(huán)3次……是不是也會走出上圖的路徑。你應(yīng)該想到了,向右轉(zhuǎn),不應(yīng)該轉(zhuǎn)60度,而應(yīng)該轉(zhuǎn)180-60=120度。練習(xí)1-4:寫繪制多邊形的函數(shù)。函數(shù)名字為polygon,參數(shù)為一個整數(shù),函數(shù)功能是繪制多邊形,邊的條數(shù)為參數(shù)值。
改變變量的值
我們可以這樣改變變量的值:在每一個循環(huán)中讓變量的值遞增,結(jié)果是每次循環(huán)所畫的正方形比上一次大一些。例如我們使用length變量,我們用這個變量的值作為變長畫正方形,下一個循環(huán)中為length增加5:length = length + 5
這是一個賦值語句,length變量被賦予length原來的值加上5。打開IDLE,輸入以下語句:>>> radius = 10
上面我們創(chuàng)建了一個變量,其名字是radius,其值為10。任何時候你都可以重新給這個變量賦一個新值:>>> radius = 20
現(xiàn)在,變量radius中的值為20了。練習(xí)1-5:創(chuàng)建一個函數(shù),函數(shù)的功能為畫60個正方形,每畫一個正方形后旋轉(zhuǎn)5度,且邊長增加。初始邊長為5,每次增加5。結(jié)果應(yīng)該如圖所示:
總結(jié)
本文我們學(xué)習(xí)了使用Python的小龜模塊turtle和它的內(nèi)置函數(shù)forward()及right()。我們探索了使用這個兩個函數(shù)繪制復(fù)雜有趣的圖形。turtle是Python其中一個包,你可以訪問Python的官方網(wǎng)站https://python.org/,上面有turtle更全面的介紹。
本文我們還學(xué)校了如何定義自己的函數(shù),自定義函數(shù)可以讓我們實現(xiàn)代碼復(fù)用。我們還學(xué)習(xí)了for循環(huán)。練習(xí)1-6:星星的誕生。首先你要寫一個名為star的函數(shù),函數(shù)功能是繪制一個五角星,如圖:
star
,接下來,你需要寫另一個starSpiral()函數(shù),函數(shù)的作用是繪制旋轉(zhuǎn)的五角星,結(jié)果如下圖:
stars spiral
總結(jié)
以上是生活随笔為你收集整理的python绘制如下图形、小三角形边长20_在编程中发现数学之美——使用Python小龟绘制多边形...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python pywinauto 单击鼠
- 下一篇: python数据分析方法五种_加速Pyt