您現在的位置是:首頁 > 舞蹈首頁舞蹈
青少年Python程式設計系列19:初識Python的海龜庫
停止的單詞是什麼
前面我們已經學完了Python的所有資料型別和程式的結構。從這節課開始,我們來學習Python的海龜庫。
海龜(turtle)庫中有一支神奇的畫筆,從繪畫窗的正中心開始,根據指令在畫布上游走。我們可以自己控制畫筆的方向、顏色、粗細,從而繪製出多彩的圖形。我們從這節課開始講turtle庫中基本的函式使用,讓我們也用python畫出屬於自己的一幅畫吧。
一、瞭解笛卡爾座標系和畫素的概念
1。1 笛卡爾座標系
在使用海龜庫畫圖的過程中,我們需要使用座標來表示畫布中一個點的位置。因此,我們需要對座標系有一個初步的瞭解。在海龜庫的畫布中,我們使用的是笛卡爾座標系,也叫平面直角座標系。
兩條數軸分別置於水平位置與垂直位置,取向右與向上的方向分別為兩條數軸的正方向。水平的數軸叫做x軸(x-axis)或橫軸,垂直的數軸叫做y軸(y-axis)或縱軸,x軸y軸統稱為座標軸,它們的公共原點O稱為直角座標系的原點(origin),以點O為原點的平面直角座標系記作平面直角座標系xOy。
在海龜庫的畫布中,畫布的
最中間
的位置是座標軸的
原點
。畫布上任何一個點的位置,都可以使用座標表示。表示方法為(x, y)。原點的座標是(0, 0)
上圖中,A點的座標是(3, 2),B點的座標是(-2, 1),C點座標是(-1, -2),D點座標是(1, -3)。
1。2 什麼叫畫素
我們都學過長度的單位,有米、分米、釐米、毫米等等。這些長度單位在我們電腦螢幕上是不適用的。為什麼呢?因為我們每個人使用的計算機的螢幕大小都是不一樣的。大到電視機,小到手機螢幕。
如果用釐米為單位,同樣是向前10釐米對於電視機螢幕來說才走了一點點,對於手機螢幕來說已經不夠用了。
計算機的顯示器是由一個個方點組成的,每一個方點的長度叫做1畫素(pixcel,簡稱px)。我們使用畫素作為長度的單位。
二、如何匯入海龜庫
海龜(turtle)庫是Python中的一個繪圖用的函式庫。在Python中匯入一個庫,需要使用import語句。匯入海龜庫的語句格式為:
import turtle
在程式中,要使用
turtle.
開頭呼叫turtle庫中的物件和方法。 為了程式中書寫簡便,我們可以加上as語句定義一個別名。
import turtle as t
使用了別名後,在程式中,只需要使用 t。 開頭呼叫turtle庫中的物件和方法。
還有一種呼叫方式,是直接呼叫庫中所有的物件和方法,函式名稱前不再需要寫任何東西。
from turtle import *
三、基本畫筆控制函式
我們先想一下,如果說給你一張紙和一支筆,畫線條的時候你會有哪些操作?使用計算機畫線條的操作基本上跟人類區別不大,無非就是落筆、抬筆、筆向前移動或者向後移動、轉動方向。那我們看一下基本畫筆控制的函式:
我們在畫圖時,畫筆的位置位於
座標原點
(畫布的最中央),畫筆的角度為
水平向右
,畫筆是
落筆狀態
。在畫布中,我們可以看到海龜的箭頭,箭頭的位置就是當前畫筆的位置,箭頭指向的方向就是畫筆當前的角度。
下面,我們來看看各種函式的具體使用吧。
3。1 forward()函式
畫筆向前移動一定的距離,使用方法:
turtle。forward(distance)
使用示例:
import turtleturtle。forward(100)turtle。done()
3。2 backward()函式
畫筆向後移動一定的距離,使用方法:
turtle。backward(distance)
使用示例:
import turtleturtle。backward(100)turtle。done()
3。3 left()函式和right()函式
left()函式是畫筆向左轉一定角度,right()函式是畫筆向右轉一定角度,函數里的引數是角度。使用的方法一樣:
turtle。left(angle)turtle。right(angle)
使用示例:
import turtleturtle。forward(100)turtle。left(90)turtle。forward(100)turtle。done()
import turtleturtle。forward(100)turtle。right(90)turtle。forward(100)turtle。done()
3。4 goto()函式
goto()函式的作用是將畫筆移動到指定的座標。無論畫筆當前轉向什麼角度,使用直線直接走到對應的座標。使用方法如下:
turtle。goto(x, y)
這裡的引數x和y表示座標軸的座標值。
使用示例:
import turtleturtle。goto(100, 100)turtle。done()
3。5 penup()和pendown()函式
看單詞就可以看出,它們分別是抬筆和落筆。函式中沒有任何引數。使用方法:
turtle。penup()turtle。pendown()
使用例項:
import turtleturtle。forward(50)turtle。penup()turtle。forward(100)turtle。pendown()turtle。forward(50)turtle。done()
四、畫筆屬性設定基本函式
前面我們雖然畫出了線條,但是都是一根黑色的細線,如果想要更加美觀,就得使用畫筆屬性設定的函數了。我們先學習三種基本的畫筆屬性的函式:
下面我們來看這幾個函式的具體使用吧:
4。1 pensize()函式
pensize()函式可以設定畫筆的粗細,在未設定粗細的情況下,預設寬度為1,函式格式:
turtle。pensize(width)
我們看看具體的例子吧:
import turtleturtle。forward(100)turtle。pensize(10)turtle。forward(100)turtle。done()
4。2 pencolor()函式
pencolor()函式可以設定畫筆的顏色,在未設定的情況下,畫筆預設顏色為黑色。函式格式:
turtle。pencolor(color)
這裡的顏色目前階段我們只要使用顏色英文單詞的字串就可以了。以後講了顏色的高階設定以後還有更多的值可以寫。我們看看具體的例子:
import turtleturtle。pensize(5)turtle。pencolor(“red”)turtle。forward(100)turtle。pencolor(“blue”)turtle。forward(100)turtle。done()
4。3 speed()函式
speed()函式的作用是控制畫圖的速度,函式的格式為:
turtle。speed(speed)
引數speed的取值範圍是0~10。
最慢為1,隨著數字變大,速度越來越快
。有一個特殊的值:
速度0為最快
。
示例程式碼:
import turtleturtle。speed(1)turtle。forward(50)turtle。speed(10)turtle。forward(50)turtle。done()
大家可以複製程式碼執行試一下。程式碼執行的過程中注意觀察畫筆執行的速度。
五、turtle庫的其他常用函式
5。1 hideturtle()函式
我們前面在試各種函式時會發現,我們都圖畫完後,畫筆還在螢幕上。如果最後生成一個作品,上面多一個畫筆確實不好看。我們當然希望把它給隱藏了。只要使用hideturtle()函式就可以了。使用方法:
turtle。hideturtle()
5。2 done()函式
前面的每一個例子中,我們都在使用它。最後我們講一下它的作用:
暫停程式,停止畫筆繪製,但繪圖窗體不關閉,直到使用者關閉Python Turtle圖形化視窗為止。使用方法:
turtle。done()
這個程式碼放在turtle畫圖的最後一行,如果後面還有程式碼將
不會再執行
。它最大的作用是阻止視窗關閉,大家可以試一下如果沒有這一行,圖畫完後會怎樣。
六、本節課函式應用例項演示
題目要求:使用turtle繪製一個邊長為100、線條寬度為5、線條顏色為綠色的等邊三角形。
題目分析:等邊三角形的三條邊相等,內角是60°。我們先繪製一條線,內角是60°,那我們畫筆要旋轉120°。線條的寬度和線條的顏色在繪圖之前先設定好。
程式碼如下:
import turtle as tt。pensize(5)t。pencolor(“green”)t。forward(100)t。left(120)t。forward(100)t。left(120)t。forward(100)t。hideturtle()t。done()
以上程式碼可以按照題目的要求繪製出等邊三角形了。但是我們想一下,三個邊的操作都都是一樣的,我們為什麼不能用迴圈語句來書寫呢?我們可以最佳化一下程式碼:
import turtle as tt。pensize(5)t。pencolor(“green”)for i in range(3): t。forward(100) t。left(120)t。hideturtle()t。done()
七、課後思考題
1、繪製一個長為300,寬為200的長方形,線條寬度為4,長的線條為粉紅色、寬的線條為紫色。
2、繪製一個五角星,每條線的長度為150,線條寬度為2,線條顏色為橙色。
3、繪製兩條長度為200的線段,兩條線的間隔為100,上面一條線顏色為棕色、下面一條線顏色為黃色,兩條線的寬度都為10。
八、上節課思考題答案
1、參考答案:
score = [(98, 97,96), (79,98,97), (90,96,97), (99,90,92), (93,98,91), (98,99,97), (89,95,87), (97,67,89)]chinese = [] # 語文成績math = [] # 數學成績english = [] # 英語成績total = [] # 總成績for i in score: chinese。append(i[0]) math。append(i[1]) english。append(i[2]) total。append(sum(i))print(“語文平均分:”, sum(chinese) / len(chinese))print(“語文最高分:”, max(chinese))print(“語文最低分:”, min(chinese))print(“數學平均分:”, sum(math) / len(math))print(“數學最高分:”, max(math))print(“數學最低分:”, min(math))print(“英語平均分:”, sum(english) / len(english))print(“英語最高分:”, max(english))print(“英語最低分:”, min(english))print(“每位同學的總成績:”, total)
2、參考答案:
for i in range(2, 101): #先取100以內的數字(range包前不包尾) for j in range(2, i): #再取小於第一次取的數 if i % j == 0: #第一次(較大)的數 除以 第二次(較小)的數 break #如果取餘為0表示j是i的因子,捨去,結束本次i所在數的所有迴圈,用break else: print(i) #無法整除所有j,則無因子,符合質數的概念,輸出
3、參考答案
a = int(input(“第一個數:”))b = int(input(“第二個數:”))# 無法確定輸入的數哪個大,先要判斷大小if a < b: xiao = a da = belse: da = a xiao = bn = 0 #求和用for i in range(xiao, da + 1): #含頭不含尾,大的數要+1 if i % 3 == 0: continue #能被3整除的略過 n += iprint(n)