Turtle概念
Turtle是一個簡單的繪圖工具。它提供了一個海龜,你可以把它理解為一個機器人,只聽得懂有限的指令。
1.在文件頭寫上如下行,這能讓我們在語句中插入中文。
#-*- coding: utf-8 -*-
2.用import turtle導入turtle庫,海龜繪圖屬性:
- (1)位置
- (2)方向
- (3)畫筆(畫筆的屬性,顏色、畫線的寬度)
3.繪圖窗口的原點(0,0)在正中間。默認情況下,海龜向正右方移動。
4.操縱海龜繪圖有着許多的命令,這些命令可以划分為兩種:一種為運動命令,一種為畫筆控制命令。
- (1)運動命令:
forward(d) | 向前移動距離d代表距離 |
backward(d) | 向后移動距離d代表距離 |
right(degree) | 向右轉動多少度 |
left(degree) | 向左轉動多少度 |
goto(x,y) | 將畫筆移動到坐標為(x,y)的位置 |
stamp() | 繪制當前圖形 |
speed(speed) | 畫筆繪制的速度范圍[0,10]整數 |
- (2)畫筆控制命令:
down() | 畫筆落下,移動時繪制圖形 |
up() | 畫筆抬起,移動時不繪制圖形 |
setheading(degree) | 海龜朝向,degree代表角度 |
reset() | 恢復所有設置 |
pensize(width) | 畫筆的寬度 |
pencolor(colorstring) | 畫筆的顏色 |
fillcolor(colorstring) | 繪制圖形的填充顏色 |
fill(Ture) | - |
fill(False) | - |
circle(radius, extent) | 繪制一個圓形,其中radius為半徑,extent為度數,例如若extent為180,則畫一個半圓;如要畫一個圓形,可不必寫第二個參數 |
5.幾個例子
-
1)畫一個邊長為60的三角形
#-*- coding: utf-8 -*- import turtle a=60 turtle.forward(a) turtle.left(120) turtle.forward(a) turtle.left(120) turtle.forward(a) turtle.left(120)
-
2)畫一個邊長為60的正方形,並填充為紅色,邊框為藍色
#-*- coding: utf-8 -*- import turtle turtle.reset() a= 60 turtle.fillcolor("red") turtle.pencolor("blue") turtle.pensize(10) turtle.fill(True) turtle.left(90) turtle.forward(a) turtle.left(90) turtle.forward(a) turtle.left(90) turtle.forward(a) turtle.left(90) turtle.forward(a) turtle.fill(False)
-
3)這是一個可以在畫布上移動畫圖的函數,如果學過計算機語言,這些都是很容易理解的,自己搗鼓着玩吧
#-*- coding: utf-8 -*- import turtle t = turtle.Pen() #布置畫布 t.forward(200) #讓畫筆往前移動200,這個是有方向的,自己觀察 t.left(90) t.backward(100) #讓畫筆后退100 t.up() #抬起畫筆,休息一下 t.right(90) #讓畫筆的方向轉一下 t.down() #放下畫筆,接着畫圖 t.reset() #重置畫布,畫錯了,來一張新的畫布 t.clear() #清除畫布上的筆跡,回到起點
-
4)畫蛇
import turtle def drawSnake(rad, angle, len, neckrad): # for i in range(len): turtle.circle(rad, angle) # 畫圓 rad:圓半徑 angle:圓弧度 turtle.circle(-rad, angle) turtle.circle(rad, angle/2) turtle.fd(rad) # 表示直線爬行,forward, 參數表示爬行的距離 turtle.circle(neckrad+1, 180) turtle.fd(rad*2/3) def main(): turtle.setup(1300, 800, 0, 0) # 甚至窗口寬+高+起始x/y pythonsize = 100 turtle.pensize(pythonsize) # 設置筆的寬度 turtle.pencolor("red") # 設置筆的顏色 turtle.seth(-40) # 設置筆的起始角度 drawSnake(40, 80, 5, pythonsize/2) main() """" python 的調用方式 1:import 庫名 調用的時:庫.函數名 優點:可以更改函數中函數的名字 2, from 庫名 import 函數名 """
-
5)畫五角星
# 順序結構 import turtle turtle.setup(2000, 2000, 0, 0) turtle.pensize(20) turtle.pencolor("black") turtle.seth(0) turtle.fd(400) turtle.seth(-144) turtle.fd(400) turtle.seth(-144-144) turtle.fd(400) turtle.seth(-144 - 144-144) turtle.fd(400) turtle.seth(-144 - 144-144-144) turtle.fd(400) # 循環結構1 import turtle turtle.setup(2000, 2000, 0, 0) turtle.pensize(20) turtle.pencolor("black") turtle.seth(0) length = 400 angle = 0 for i in range(5): turtle.fd(length) angle = angle - 144 turtle.seth(angle) # 循環結構2 import turtle import time turtle.color("purple") turtle.pensize(5) turtle.goto(0,0) turtle.speed(10) for i in range(6): turtle.forward(100) turtle.right(144) turtle.up() turtle.forward(100) turtle.goto(-150,-120) turtle.color("red") turtle.write("Done") time.sleep(3) # 循環遞歸函數 import turtle def drawFivePiontedStar(length, angle): """ Draw five_pointed_star by turtle library Initial screen ;width+height+initial position Initial pen: font+color Drawing line by recursive_function :param length: Initial five_pointed_star length :param angle: Initial position :return: None """ def drawline(length, angle): turtle.seth(angle) turtle.fd(length) turtle.setup(2000, 2000, 0, 0) turtle.pensize(20) turtle.pencolor("black") for i in range(5): drawline(length, angle) angle = angle-144 if __name__ == "__main__": drawFivePiontedStar(400, 0)
-
5)畫樹
import turtle def branch(length, level): """ 使用遞歸函數實現畫樹 以沒有樹杈為例 起始角度為90° 向左轉換角45°,看有沒有樹杈(level) 如果沒有,向右轉換角90°(-45),看有沒有樹杈 如果沒有,向右轉換45°(0),返回原路 """ if level <= 0: return turtle.forward(length) turtle.left(45) branch(0.6 * length, level - 1) # 90 turtle.right(90) branch(0.6 * length, level - 1) turtle.left(45) turtle.backward(length) return if __name__ == "__main__": turtle.left(90) branch(100, 3)
-
6)繪制正方形
import turtle import time #定義繪制時畫筆的顏色 turtle.color("purple") #定義繪制時畫筆的線條的寬度 #turtle.size(5) turtle.pensize(5) #定義繪圖的速度 turtle.speed(10) #以0,0為起點進行繪制 turtle.goto(0,0) #繪出正方形的四條邊 for i in range(4): turtle.forward(100) turtle.right(90) #畫筆移動到點(-150,-120)時不繪圖 turtle.up() turtle.goto(-150,-120) #再次定義畫筆顏色 turtle.color("red") #在(-150,-120)點上打印"Done" turtle.write("Done") time.sleep(3)
-
7)復雜的形狀
from turtle import * color('red', 'yellow') begin_fill() while True: forward(200) left(170) if abs(pos()) < 1: break end_fill() done()