目錄
- Turtle
- 讓小海龜轉彎
- 畫一顆五角星
- 移動五角星
Turtle
turtle 是 Python 中自帶的繪圖模塊,最初來自于 Wally Feurzeig, Seymour Papert 和 Cynthia Solomon 于 1967 年所創造的 Logo 編程語言,
你可以使用 turtle 控制畫筆在畫板上畫畫,而這個畫筆是有形狀的,默認是一個小箭頭,我們可以使用 turtle.shape(‘turtle’) 將其設成一個小海龜,除了變成小海龜外,還支持傳入:
- ‘arrow’(箭頭)
- ‘circle’(圓)
- ‘circle’(圓)
- ‘triangle’(三角形)
- ‘classic’(經典)
默認狀態下,我們的畫筆是落在畫板最中間的,并以此為原點形成了一個坐標系,單位是像素,并且我們根據“上北下南左西右東”的慣例標注四個方向,實際上這個坐標系是不顯示的,但我們要知道小海龜實際上是在坐標系內移動的,

小海龜頭的朝向是前方(默認朝東),我們可以呼叫 turtle.forward(3) 讓小海龜前進 3 像素,也就是小海龜移動到了坐標系中 (3, 0) 的位置,因為我們的畫筆默認是落下的,因此在移動的程序中會留下一道軌跡,即一條長 3 像素的直線,
除了前進之外,當然也有后退,呼叫 turtle.backward(3) 即可讓小海龜向后倒退 3 像素,移動到坐標系中 (-3, 0) 的位置,同樣也會留下一條長 3 像素的直線,

注意:后退后小海龜的朝向是不變的,
畫筆的顏色默認是黑色的,我們可以使用 turtle.color(‘red’) 改成紅色的,當然,你也可以使用 turtle.color(‘yellow’) 改成黃色,使用 turtle.color(‘pink’) 改成粉色等等,
除了使用顏色的英文外,我們還能傳入 16 進制的 RGB 色值,RGB 色值能表示出 1600 多萬種顏色,比如 #000000 表示黑色,#FFFFFF 表示白色,#FF0000 表示紅色等,
現在我們嘗試用小烏龜畫一個100像素長的直線
import turtle
turtle.shape('turtle')
turtle.color('brown')
turtle.backward(100)
# turtle.forward(100)
turtle.done()
結果:

注意點:
①這個地方前進后退都可以
②畫完圖之后一定記得要turtle.done(),否則程式在畫完之后會立即退出,你會看不到結果,造成一種閃退的假象,
讓小海龜轉彎
轉彎其實很簡單,分為左轉和右轉,
- 左轉是 turtle.left()
- 右轉是 turtle.right()
它倆的引數是角度,比如 turtle.right(90) 表示右轉 90 度,同理,turtle.left(90) 表示左轉 90 度,
轉向后,小海龜的朝向就變了,再呼叫 turtle.forward() 會朝著轉向后小海龜頭指著的方向前進,
我們可以試著畫一個正方形:
import turtle
turtle.forward(100)
turtle.right(90)
turtle.forward(100)
turtle.right(90)
turtle.forward(100)
turtle.right(90)
turtle.forward(100)
turtle.right(90)
#簡化一下
import turtle
for i in range(4):
turtle.forward(100)
turtle.right(90)
結果:

turtle.left() 和 turtle.right() 每次轉向都是根據當前朝向來轉的,當多次轉向后你可能就不知道現在朝向哪了,因此,我們還可以使用 turtle.setheading() 來直接設定朝向,turtle.setheading() 的引數也是角度,只是這個角度對應的朝向是固定的,具體對應方式如下圖所示:

因此,我們可以直接呼叫 turtle.setheading(0) 讓小海龜朝東,呼叫 turtle.setheading(180) 讓小海龜朝西,當然,0 到 360 度之間的角度都是可以的,呼叫 turtle.setheading(45) 可以讓小海龜朝向東北方向,
之前顯示小海龜是為了方便理解朝向,現在弄清楚了朝向我們就可以將小海龜隱藏了,隱藏小海龜可以加快繪圖的速度,并且最后畫出的圖上也不會有個小海龜影響畫風,
要隱藏小海龜非常的簡單,只要呼叫 turtle.hideturtle() 即可,當你想再次顯示小海龜時,呼叫 turtle.showturtle() 即可,
畫一顆五角星
五角星每個角的度數都是 36 度,用 180 - 36 得到對應的補角為 144 度,如下圖所示:

五角星的五條線的長度是一樣的,并且角度也一樣,那么,我們就可以用回圈來畫五角星,五角星要畫 5 條線,因此要回圈 5 次,每次回圈都除了畫一條線,還要旋轉特定的角度,從上圖可知,每次向右旋轉 144 度即可,所以畫五角星的代碼如下:
import turtle
turtle.color('red')
turtle.hideturtle()
for i in range(5):
turtle.forward(100)
turtle.right(144)
結果:

在這個基礎上我們還可以給五角星上色,
相關方法:
①turtle.color() 會將畫筆顏色和填充顏色都設定成一個
②turtle.fillcolor() 能單獨設定填充顏色
③turtle.pencolor() 單獨設定畫筆顏色
④turtle.begin_fill() 開始填充
⑤turtle.end_fill() 結束填充
我們只要在畫五角星之前呼叫 turtle.begin_fill(),在畫完五角星之后呼叫 turtle.end_fill(),我們畫的五角星就會被填充上我們設定好的顏色了,
import turtle
turtle.color('red')
turtle.hideturtle()
turtle.begin_fill() # 開始填充
for i in range(5):
turtle.forward(100)
turtle.right(144)
turtle.end_fill() # 結束填充
結果:

移動五角星
你可能已經發現了,這顆五角星有些“歪”,不在畫板的正中間,如果我們腦補出坐標系的話,我們的五角星處于的位置其實是下面這樣的:

因此,我們需要將我們的五角星先左移再上移,讓五角星處于坐標系的中間,就像下面這樣:

我們做不到直接移動五角星,但我們可以移影片筆的初始位置,只要將畫筆的初始位置往左上方移動一點,這樣我們的五角星就處于坐標系的最中間了,上圖中畫筆的初始位置在坐標系中大概是 (-50 ,20),我們可以呼叫 turtle.goto(-50, 20) 來移影片筆的位置,
turtle.goto(x, y)
將畫筆移動到指定位置
第一個引數是 x 軸的坐標,第二個引數是 y 軸的坐標,
但直接移影片筆位置是有問題的,因為我們的畫筆一直處于落下的狀態,移動的程序中也會畫出一條直線,我們可以呼叫 turtle.penup() 將畫筆抬起,這樣移動的程序中就不會畫線,等需要時再呼叫 turtle.pendown() 將畫筆落下開始繪圖,
turtle.penup() 將畫筆抬起
turtle.pendown() 將畫筆落下
所以,將邊長為 100 像素的五角星移動坐標系中央的完整代碼如下:
import turtle
turtle.color('red')
turtle.hideturtle()
turtle.penup()
turtle.goto(-50, 20)
turtle.pendown()
turtle.begin_fill()
for i in range(5):
turtle.forward(100)
turtle.right(144)
turtle.end_fill()
#一閃一閃亮晶晶
我們還可以畫一堆星星,實作“一閃一閃亮晶晶,滿天都是小星星”的效果~?
因為畫的星星比較多,我們先把之前畫五角星的代碼封裝成一個函式:
import turtle
def draw_star():
turtle.color('white')
turtle.hideturtle()
turtle.begin_fill()
for i in range(5):
turtle.forward(10)
turtle.right(144)
turtle.end_fill()
星星的光是白色的,因此我將顏色設定成了白色(white),并且,因為是小星星,我將邊長設成了 10 像素,畫一個小星星的方法搞定了,接下來是畫滿天星,就畫 50 個吧!滿天星的位置都是隨機的,我們需要用到 random 模塊生成隨機位置,
隨機畫 50 顆小星星的代碼如下:
import turtle
from random import randint
def draw_star():
turtle.color('white')
turtle.hideturtle()
turtle.begin_fill()
for i in range(5):
turtle.forward(10)
turtle.right(144)
turtle.end_fill()
for i in range(50):
turtle.speed(0) # 最快速
turtle.penup()
x = randint(-150, 150) # x 軸
y = randint(-100, 100) # y 軸
turtle.goto(x, y)
turtle.pendown()
draw_star()
上述代碼涉及的方法:
①turtle.speed(x)
控制繪圖速度
turtle.speed(x) 的引數是 0-10 的整數,其中 1-10 數字越大,繪圖速度越快,1 最慢,10 最快,默認是 6,而 0 表示沒有影片效果,因此 0 比 10 的速度還要快,
②turtle.write()
在畫板上寫字
引數為要寫的內容,我們還能設定字的字體、大小等,比如turtle.write(‘By CSDN’, font = (‘SimHei’, 12, ‘bold’)),font 引數是個元組,其中第一個是字體,第二個是字體大小,最后一個是字重,
完整代碼:
import turtle
from random import randint
def draw_star():
turtle.color('black')
turtle.hideturtle()
turtle.begin_fill()
for i in range(5):
turtle.forward(10)
turtle.right(144)
turtle.end_fill()
for i in range(50):
turtle.speed(0)
turtle.penup()
x = randint(-150, 150)
y = randint(-100, 100)
turtle.goto(x, y)
turtle.pendown()
draw_star()
turtle.penup()
turtle.goto(0, -130)
turtle.pendown()
turtle.write('By CSDN', font = ('SimHei', 12, 'bold'))
結果:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/421677.html
標籤:AI
