turtle()幾個實例


 

 1.用文本內容畫圓

import turtle
#text=input('請輸入要打印的文字:')
text="我愛你中國!我愛你中國!我愛你中國!我愛你中國!我愛你中國!我愛你中國!我愛你中國!我愛你中國!我愛你中國!"
'''
可近似地將畫筆的運動軌跡看為一個正多邊形.
根據多邊形內角和公式:度數=(邊數-2)*180,
那么,每次旋轉的度數為:180-度數/角數=180-(邊數-2)*180/邊數.
易知,邊數=角數=文字數,
所以每次旋轉的度數為:180-(文字數-2)*180/文字數=360/文字數.
'''
turtle.pu()#抬起筆turtle.penup()
turtle.goto(-100,200)#將畫筆移動到坐標為(-100,200)的位置
x=len(text)#x為文本長度
for i in text:
    turtle.speed(1)#設置畫筆速度
    turtle.write(i,font='華文中宋')
    turtle.rt(360/x)#turtle順時針方向移動360/x度
    turtle.pu()#抬起筆
    turtle.fd(30)#向當前畫筆方向移動30個像素長度
turtle.hideturtle()#隱藏畫筆的turtle形狀

效果圖:

 2.畫玫瑰花

import turtle

import time

turtle.speed(5)

# 設置初始位置  

turtle.penup()  

turtle.left(90)  

turtle.fd(200)  

turtle.pendown()  

turtle.right(90)
# 花蕊  

turtle.fillcolor("red")  

turtle.begin_fill()  

turtle.circle(10,180)  

turtle.circle(25,110)  

turtle.left(50)  

turtle.circle(60,45)  

turtle.circle(20,170)  

turtle.right(24)  

turtle.fd(30)  

turtle.left(10)  

turtle.circle(30,110)  

turtle.fd(20)  

turtle.left(40)  

turtle.circle(90,70)  

turtle.circle(30,150)  

turtle.right(30)  

turtle.fd(15)  

turtle.circle(80,90)  

turtle.left(15)  

turtle.fd(45)  

turtle.right(165)  

turtle.fd(20)  

turtle.left(155)  

turtle.circle(150,80)  

turtle.left(50)  

turtle.circle(150,90)  

turtle.end_fill()  

   

# 花瓣1  

turtle.left(150)  

turtle.circle(-90,70)  

turtle.left(20)  

turtle.circle(75,105)  

turtle.setheading(60)  

turtle.circle(80,98)  

turtle.circle(-90,40)  

  

# 花瓣2  

turtle.left(180)  

turtle.circle(90,40)  

turtle.circle(-80,98)  

turtle.setheading(-83)  

  

# 葉子1  

turtle.fd(30)  

turtle.left(90)  

turtle.fd(25)  

turtle.left(45)  

turtle.fillcolor("green")  

turtle.begin_fill()  

turtle.circle(-80,90)  

turtle.right(90)  

turtle.circle(-80,90)  

turtle.end_fill()  

   

turtle.right(135)  

turtle.fd(60)  

turtle.left(180)  

turtle.fd(85)  

turtle.left(90)  

turtle.fd(80)  

   

# 葉子2  

turtle.right(90)  

turtle.right(45)  

turtle.fillcolor("green")  

turtle.begin_fill()  

turtle.circle(80,90)  

turtle.left(90)  

turtle.circle(80,90)  

turtle.end_fill()  

   

turtle.left(135)  

turtle.fd(60)  

turtle.left(180)  

turtle.fd(60)  

turtle.right(90)  

turtle.circle(200,60) 

效果:

 

 3.畫太陽花

import turtle

turtle=turtle.Turtle()#調用turtle庫中的turtle()函數創建一個turtle對象
screen=turtle.getscreen()#獲取屏幕

turtle.color('red', 'yellow')#畫筆為紅色,填充為黃色
turtle.begin_fill()
for i in range(50):
    turtle.forward(200)
    turtle.left(170)
turtle.end_fill()
screen.mainloop() #使畫布運行完之后不要關閉

效果:

 

 4.數據驅動的動態路徑繪制

import turtle as t
def main():
    #設置窗口信息
    t.title("數據驅動的動態路徑繪制")#建立標題
    t.setup(800,600,0,0)#設置大小為800*600的窗口,python坐標原點默認設置在窗口中心
    
    #設置畫筆
    pen=t.Turtle()#通過turtle()建立畫筆pen,其默認位置是窗口原點
    pen.color("red")#設置畫筆顏色為紅色
    pen.width(5)#設置畫筆寬度為5
    pen.shape("turtle")#設置畫筆形狀為turtle
    pen.speed(1)#設置繪畫速度為5
    #讀取數據文件到列表result[]中
    result=[]
    file=open("data.txt","r")
    for line in file:
        result.append(list(map(float,line.split(','))))
        #將數據文件的每行數據都存放在result[]中
        #print(result)
    #動態繪制
    for i in range(len(result)):
        pen.color((result[i][3],result[i][4],result[i][5]))
        #每一行的第4-6位來定義畫筆顏色
        pen.fd(result[i][0])#向前爬行的距離
#判斷語句如為1則為真,0則為假,如果該行的第二個數據是0則畫筆向左,如為1畫筆向右
        if result[i][1]:
            pen.rt(result[i][2])
            #小烏龜向右爬行並旋轉角度為第三個數據
        else:
            pen.lt(result[i][2])
    pen.goto(0,0)#畫筆回到原點
    
main()
        

效果:

 

 

 5.畫五角星

#使用turtle庫繪制並填充五角星

from turtle import Turtle   #引用turtle庫
p=Turtle()      #給p賦值為
p.speed(2)     #速度
p.pensize(5)   #畫筆寬度
p.color("red")    #畫筆顏色
p.fillcolor("yellow")#填充顏色
#以上兩句也可以用  p.color("red","yellow")代替

p.begin_fill()     #填充顏色開始
for i in range(5):      #循環5次繪制五角星
    p.forward(400)      
    p.right(144)        #五角星的每個角為144度
p.end_fill()   #填充圖形顏色前調用

效果:

 

 

 

6.畫樹

#繪制樹的代碼
#from turtle import Turtle
#p=Turtle()

import turtle as p #這一句相當於上面的兩句
def tree(plist,l,a,f):
    """
    plist 是存放一組turtle對象的列表
    l  是樹枝的長度
    a  是畫筆調整角度
    f  是下層枝杈長度與下層枝杈長度的比例
    """
    if l>5:
        lst=[]
        #for循環語句主要是用來完成lst[]列表里存放的畫筆對象對應的一支樹枝的繪制及左右各分支的繪畫准備
        for p in plist:
            p.forward(l)#沿當前的方向畫畫,完成主桿的繪制
            q=p.clone()
            """相當於在當前海龜的位置處克隆出另外一只位置方向等屬性相同的海龜,並取名為q,
               之后使用q.任意turtle()可操作這只海龜,q海龜與之前的海龜完全獨立,相當於兩
               只海龜經過克隆后思維就完全獨立了,改變turtle海龜或者q海龜的屬性對另一個沒有影響"""
            p.left(a)#將原來的海龜向左調整角度a
            q.right(a)#將克隆的海龜向右調整角度a
            lst.append(p)#將對象存儲在lst[]中,用來進行下一層枝杈繪制的遞歸調用
            lst.append(q)#將對象存儲在lst[]中,用來進行下一層枝杈繪制的遞歸調用
        tree(lst,l*f,a,f)
def main():
   # from turtle import Turtle
    #p=Turtle
    p.color("green")#畫筆顏色
    p.pensize(5)#畫筆寬度
    p.hideturtle()#隱藏畫筆的turtle形狀
    p.speed(1)
    p.getscreen().tracer(30,0)
    
    """ turtle.tracer()是為了加快作圖的,你可以在里面添加參數,比如:
        turtle.tracer(False)或者turtle.tracer(0):圖形將一次性畫好
        turtle.tracer(1):圖形按照正常速度進行,可有可無
        turtle.tracer(4):在循環中,圖形將一次畫出4次循環的圖"""
    p.left(90)#畫筆左轉90度
    p.penup()#提起筆
    p.goto(100,100)#去這個坐標點
    p.pendown()#落下筆
    t=tree([p],110,65,0.6375)#調用tree()函數
    p.getscreen().tracer(30,0)
    p.right(90)#畫筆左轉90度
    p.penup()#提起筆
    p.goto(-300,100)#去這個坐標點
    p.pendown()#落下筆
    t=tree([p],110,65,0.6375)#調用tree()函數
    p.getscreen().tracer(30,0)
    p.right(90)#畫筆左轉90度
    p.penup()#提起筆
    p.goto(-300,-300)#去這個坐標點
    p.pendown()#落下筆
    t=tree([p],110,65,0.6375)#調用tree()函數
    p.getscreen().tracer(30,0)
    p.right(90)#畫筆左轉90度
    p.penup()#提起筆
    p.goto(100,-300)#去這個坐標點
    p.pendown()#落下筆
    t=tree([p],110,65,0.6375)#調用tree()函數
    """[p]是原來的小海龜的turtle對象列表??????????不太明白"""
   
main()

效果:

 

 

 


版權聲明:本文為CSDN博主「Commander_Wing」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/Commander_WingT/java/article/details/88748970


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM