赞
踩
大家好,小编来为大家解答以下问题,简单且有创意的python作品,有趣的python程序,现在让我们一起来看看吧!
有趣的turtle库
1、彩色螺旋线
2、太阳花
3、国旗
4、玫瑰花
5、彩色树
6、随机樱花树
7、表白树
8、圆舞曲
9、哆啦A梦
10、时钟
文末可获取大量Python学习资料,视频教程,电子书籍,源码案例
- from turtle import *
- speed(9) # 画笔速度
- pensize(2) # 画笔的宽度
- bgcolor("black") # 画布背景色
- colors = ["red","yellow","purple","blue"] # 定义画笔线色
- for x in range(400): # 循环一次 画一条线
- forward(2*x) # 向当前方向前进n像素
- color(colors[x % 4]) # 根据求余 调整画笔线色
- left(91) # 向左旋转91度
- mainloop()
- import 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()
- turtle.done()
- from turtle import *
- screensize(2000, 2000, 'white') # 设置画布大小
- speed(9)
- # 绘制旗面
- pencolor('red')
- # pu()
- goto(-300, -200)
- pd()
- fillcolor('red')
- begin_fill()
- for i in range(0, 2):
- fd(600)
- lt(90)
- fd(400)
- lt(90)
- end_fill()
- # 绘制大五角星
- pu()
- pencolor('yellow')
- goto(-260, 120)
- pd()
- fillcolor('yellow')
- begin_fill()
- for i in range(0, 5):
- fd(113.137) # 大星一划的边长
- rt(144)
- end_fill()
- # 绘制四个小五角星
- list1 = [(-100, 160), (-60, 120), (-60, 60), (-100, 20)] # 四个五角星的中心坐标
- list2 = [31.98, 8.13, -15.59, -38.66] # 相对角度0的后退1.111需要左转的角度
-
- for j in range(0, 4):
- seth(0) # 这是龟头角度为0
- pu()
- goto(list1[j]) # 定位到五角星中心
- lt(list2[j]) # 旋转角度,以背向指向大五角星的角尖
- bk(20) # 从五角星中心到指向大五角星的角尖(龟倒着爬)退一个小圆半径
- lt(18) # 五角星的半角角度
- pd()
- begin_fill()
- for i in range(0, 5):
- fd(113.137 / 3) # 小星一划的边长
- rt(144)
- end_fill()
- pu()
- ht()
- done()
- 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)
- turtle.done()
- # 这个比较复杂,画的时间较长
-
- from turtle import *
- # 设置色彩模式是RGB:
- colormode(255)
- lt(90)
- lv = 14
- l = 120
- s = 45
- width(lv)
- # 初始化RGB颜色:
- r = 0
- g = 0
- b = 0
- pencolor(r, g, b)
- penup()
- bk(l)
- pendown()
- fd(l)
- def draw_tree(l, level):
- global r, g, b
- # save the current pen width
- w = width()
- # narrow the pen width
- width(w * 3.0 / 4.0)
- # set color:
- r = r + 1
- g = g + 2
- b = b + 3
- pencolor(r % 200, g % 200, b % 200)
- l = 3.0 / 4.0 * l
- lt(s)
- fd(l)
- if level < lv:
- draw_tree(l, level + 1)
- bk(l)
- rt(2 * s)
- fd(l)
- if level < lv:
- draw_tree(l, level + 1)
- bk(l)
- lt(s)
- # restore the previous pen width
- width(w)
- speed("fastest")
- draw_tree(l, 4)
- done()
- # 每次运行 树的形状是随机的
- import turtle as T
- import random
- import time
-
- # 画樱花的躯干(60,t)
- def Tree(branch, t):
- time.sleep(0.0005)
- if branch > 3:
- if 8 <= branch <= 12:
- if random.randint(0, 2) == 0:
- t.color('snow') # 白
- else:
- t.color('lightcoral') # 淡珊瑚色
- t.pensize(branch / 3)
- elif branch < 8:
- if random.randint(0, 1) == 0:
- t.color('snow')
- else:
- t.color('lightcoral') # 淡珊瑚色
- t.pensize(branch / 2)
- else:
- t.color('sienna') # 赭(zhě)色
- t.pensize(branch / 10) # 6
- t.forward(branch)
- a = 1.5 * random.random()
- t.right(20 * a)
- b = 1.5 * random.random()
- Tree(branch - 10 * b, t)
- t.left(40 * a)
- Tree(branch - 10 * b, t)
- t.right(20 * a)
- t.up()
- t.backward(branch)
- t.down()
-
- # 掉落的花瓣
- def Petal(m, t):
- for i in range(m):
- a = 200 - 400 * random.random()
- b = 10 - 20 * random.random()
- t.up()
- t.forward(b)
- t.left(90)
- t.forward(a)
- t.down()
- t.color('lightcoral') # 淡珊瑚色
- t.circle(1)
- t.up()
- t.backward(a)
- t.right(90)
- t.backward(b)
-
- # 绘图区域
- t = T.Turtle()
- # 画布大小
- w = T.Screen()
- t.hideturtle() # 隐藏画笔
- t.getscreen().tracer(5, 0)
- w.screensize(bg='wheat') # wheat小麦
- t.left(90)
- t.up()
- t.backward(150)
- t.down()
- t.color('sienna')
-
- # 画樱花的躯干
- Tree(60, t)
- # 掉落的花瓣
- Petal(200, t)
- w.exitonclick()
- T.done()
- import random
- import turtle
- def love(x, y): # 在(x,y)处画爱心lalala
- lv = turtle.Turtle()
- lv.hideturtle()
- lv.up()
- lv.goto(x, y) # 定位到(x,y)
-
- def curvemove(): # 画圆弧
- for i in range(20):
- lv.right(10)
- lv.forward(2)
-
- lv.color('red', 'pink')
- lv.speed(0)
- lv.pensize(1)
- # 开始画爱心lalala
- lv.down()
- lv.begin_fill()
- lv.left(140)
- lv.forward(22)
- curvemove()
- lv.left(120)
- curvemove()
- lv.forward(22)
- lv.write("{}".format("他-她"), font=("Arial", 10, "normal"), align="center")
- lv.left(140) # 画完复位
- lv.end_fill()
-
-
- def tree(branchLen, t):
- if branchLen > 5: # 剩余树枝太少要结束递归
- if branchLen < 20: # 如果树枝剩余长度较短则变绿
- t.color("green")
- t.pensize(random.uniform((branchLen + 5) / 4 - 2, (branchLen + 6) / 4 + 5))
- t.down()
- t.forward(branchLen)
- love(t.xcor(), t.ycor()) # 传输现在turtle的坐标
- t.up()
- t.backward(branchLen)
- t.color("brown")
- return
- t.pensize(random.uniform((branchLen + 5) / 4 - 2, (branchLen + 6) / 4 + 5))
- t.down()
- t.forward(branchLen)
- # 以下递归
- ang = random.uniform(15, 45)
- t.right(ang)
- tree(branchLen - random.uniform(12, 16), t) # 随机决定减小长度
- t.left(2 * ang)
- tree(branchLen - random.uniform(12, 16), t) # 随机决定减小长度
- t.right(ang)
- t.up()
- t.backward(branchLen)
-
-
- def Fonts():
- t.penup()
- t.goto(-500, -300)
- t.pencolor('black')
- t.write("余生的快乐希望与你一起!^_^", font=('方正行黑简体', 30, 'normal'))
- myWin = turtle.Screen()
- t = turtle.Turtle()
- t.hideturtle()
- t.speed(0)
- t.left(90)
- t.up()
- t.backward(200)
- t.down()
- t.color("brown")
- t.pensize(32)
- t.forward(60)
- tree(100, t)
- Fonts()
- myWin.exitonclick()
- from turtle import *
- def stop():
- global running
- running = False
- def main():
- global running
- clearscreen()
- bgcolor("gray10")
- tracer(False)
- shape("triangle")
- f = 0.793402
- phi = 9.064678
- s = 5
- c = 1
- # create compound shape
- sh = Shape("compound")
- for i in range(10):
- shapesize(s)
- p =get_shapepoly()
- s *= f
- c *= f
- tilt(-phi)
- sh.addcomponent(p, (c, 0.25, 1-c), "black")
- register_shape("multitri", sh)
- # create dancers
- shapesize(1)
- shape("multitri")
- pu()
- setpos(0, -200)
- dancers = []
- for i in range(180):
- fd(7)
- tilt(-4)
- lt(2)
- update()
- if i % 12 == 0:
- dancers.append(clone())
- home()
- # dance
- running = True
- onkeypress(stop)
- listen()
- cs = 1
- while running:
- ta = -4
- for dancer in dancers:
- dancer.fd(7)
- dancer.lt(2)
- dancer.tilt(ta)
- ta = -4 if ta > 0 else 2
- if cs < 180:
- right(4)
- shapesize(cs)
- cs *= 1.005
- update()
- return "DONE!"
-
- if __name__=='__main__':
- print(main())
- mainloop()
-
- import turtle
- def flyTo(x, y):
- turtle.penup()
- turtle.goto(x, y)
- turtle.pendown()
- def drawEye():
- turtle.tracer(False)
- a = 2.5
- for i in range(120):
- if 0 <= i < 30 or 60 <= i < 90:
- a -= 0.05
- else:
- a += 0.05
- turtle.left(3)
- turtle.fd(a)
- turtle.tracer(True)
- def beard():
- """ 画胡子, 一共六根
- """
- # 左边第一根胡子
- flyTo(-37, 135)
- turtle.seth(165)
- turtle.fd(60)
- # 左边第二根胡子
- flyTo(-37, 125)
- turtle.seth(180)
- turtle.fd(60)
- # 左边第三根胡子
- flyTo(-37, 115)
- turtle.seth(193)
- turtle.fd(60)
- # 右边第一根胡子
- flyTo(37, 135)
- turtle.seth(15)
- turtle.fd(60)
- # 右边第二根胡子
- flyTo(37, 125)
- turtle.seth(0)
- turtle.fd(60)
- # 右边第三根胡子
- flyTo(37, 115)
- turtle.seth(-13)
- turtle.fd(60)
- def drawRedScarf():
- """ 画围巾
- """
- turtle.fillcolor("red") # 填充颜色
- turtle.begin_fill()
- turtle.seth(0) # 朝向右
- turtle.fd(200) # 前进10个单位
- turtle.circle(-5, 90)
- turtle.fd(10)
- turtle.circle(-5, 90)
- turtle.fd(207)
- turtle.circle(-5, 90)
- turtle.fd(10)
- turtle.circle(-5, 90)
- turtle.end_fill()
- def drawMouse():
- flyTo(5, 148)
- turtle.seth(270)
- turtle.fd(100)
- turtle.seth(0)
- turtle.circle(120, 50)
- turtle.seth(230)
- turtle.circle(-120, 100)
- def drawRedNose():
- flyTo(-10, 158)
- turtle.fillcolor("red") # 填充颜色
- turtle.begin_fill()
- turtle.circle(20)
- turtle.end_fill()
- def drawBlackdrawEye():
- turtle.seth(0)
- flyTo(-20, 195)
- turtle.fillcolor("#000000") # 填充颜色
- turtle.begin_fill()
- turtle.circle(13)
- turtle.end_fill()
- turtle.pensize(6)
- flyTo(20, 205)
- turtle.seth(75)
- turtle.circle(-10, 150)
- turtle.pensize(3)
- flyTo(-17, 200)
- turtle.seth(0)
- turtle.fillcolor("#ffffff")
- turtle.begin_fill()
- turtle.circle(5)
- turtle.end_fill()
- flyTo(0, 0)
- def drawFace():
- turtle.forward(183) # 前行183个单位
- turtle.fillcolor("white") # 填充颜色为白色
- turtle.begin_fill() # 开始填充
- turtle.left(45) # 左转45度
- turtle.circle(120, 100) # 右边那半边脸
- turtle.seth(90) # 朝向向上
- drawEye() # 画右眼睛
- turtle.seth(180) # 朝向左
- turtle.penup() # 抬笔
- turtle.fd(60) # 前行60
- turtle.pendown() # 落笔
- turtle.seth(90) # 朝向上
- drawEye() # 画左眼睛
- turtle.penup() # 抬笔
- turtle.seth(180) # 朝向左
- turtle.fd(64) # 前进64
- turtle.pendown() # 落笔
- turtle.seth(215) # 修改朝向
- turtle.circle(120, 100) # 左边那半边脸
- turtle.end_fill() #
- def drawHead():
- """ 画了一个被切掉下半部分的圆
- """
- turtle.penup() # 抬笔
- turtle.circle(150, 40) # 画圆, 半径150,圆周角40
- turtle.pendown() # 落笔
- turtle.fillcolor("#00a0de") # 填充色
- turtle.begin_fill() # 开始填充
- turtle.circle(150, 280) # 画圆,半径150, 圆周角280
- turtle.end_fill()
- def drawAll():
- drawHead()
- drawRedScarf()
- drawFace()
- drawRedNose()
- drawMouse()
- beard()
- flyTo(0, 0)
- turtle.seth(0)
- turtle.penup()
- turtle.circle(150, 50)
- turtle.pendown()
- turtle.seth(30)
- turtle.fd(40)
- turtle.seth(70)
- turtle.circle(-30, 270)
- turtle.fillcolor("#00a0de")
- turtle.begin_fill()
- turtle.seth(230)
- turtle.fd(80)
- turtle.seth(90)
- turtle.circle(1000, 1)
- turtle.seth(-89)
- turtle.circle(-1000, 10)
- turtle.seth(180)
- turtle.fd(70)
- turtle.seth(90)
- turtle.circle(30, 180)
- turtle.seth(180)
- turtle.fd(70)
- turtle.seth(100)
- turtle.circle(-1000, 9)
- turtle.seth(-86)
- turtle.circle(1000, 2)
- turtle.seth(230)
- turtle.fd(40)
- turtle.circle(-30, 230)
- turtle.seth(45)
- turtle.fd(81)
- turtle.seth(0)
- turtle.fd(203)
- turtle.circle(5, 90)
- turtle.fd(10)
- turtle.circle(5, 90)
- turtle.fd(7)
- turtle.seth(40)
- turtle.circle(150, 10)
- turtle.seth(30)
- turtle.fd(40)
- turtle.end_fill()
- # 左手
- turtle.seth(70)
- turtle.fillcolor("#FFFFFF")
- turtle.begin_fill()
- turtle.circle(-30)
- turtle.end_fill()
- # 脚
- flyTo(103.74, -182.59)
- turtle.seth(0)
- turtle.fillcolor("#FFFFFF")
- turtle.begin_fill()
- turtle.fd(15)
- turtle.circle(-15, 180)
- turtle.fd(90)
- turtle.circle(-15, 180)
- turtle.fd(10)
- turtle.end_fill()
- flyTo(-96.26, -182.59)
- turtle.seth(180)
- turtle.fillcolor("#FFFFFF")
- turtle.begin_fill()
- turtle.fd(15)
- turtle.circle(15, 180)
- turtle.fd(90)
- turtle.circle(15, 180)
- turtle.fd(10)
- turtle.end_fill()
- # 右手
- flyTo(-133.97, -91.81)
- turtle.seth(50)
- turtle.fillcolor("#FFFFFF")
- turtle.begin_fill()
- turtle.circle(30)
- turtle.end_fill()
- # 口袋
- flyTo(-103.42, 15.09)
- turtle.seth(0)
- turtle.fd(38)
- turtle.seth(230)
- turtle.begin_fill()
- turtle.circle(90, 260)
- turtle.end_fill()
- flyTo(5, -40)
- turtle.seth(0)
- turtle.fd(70)
- turtle.seth(-90)
- turtle.circle(-70, 180)
- turtle.seth(0)
- turtle.fd(70)
- # 铃铛
- flyTo(-103.42, 15.09)
- turtle.fd(90)
- turtle.seth(70)
- turtle.fillcolor("#ffd200")
- turtle.begin_fill()
- turtle.circle(-20)
- turtle.end_fill()
- turtle.seth(170)
- turtle.fillcolor("#ffd200")
- turtle.begin_fill()
- turtle.circle(-2, 180)
- turtle.seth(10)
- turtle.circle(-100, 22)
- turtle.circle(-2, 180)
- turtle.seth(180 - 10)
- turtle.circle(100, 22)
- turtle.end_fill()
- flyTo(-13.42, 15.09)
- turtle.seth(250)
- turtle.circle(20, 110)
- turtle.seth(90)
- turtle.fd(15)
- turtle.dot(10)
- flyTo(0, -150)
- drawBlackdrawEye()
- def main():
- turtle.screensize(800, 6000, "#F0F0F0")
- turtle.pensize(3)
- turtle.speed(9)
- drawAll()
- if __name__ == "__main__":
- main()
- turtle.mainloop()
- import turtle
- from datetime import *
-
- # 抬起画笔,向前运动一段距离放下
- def Skip(step):
- turtle.penup()
- turtle.forward(step)
- turtle.pendown()
- def mkHand(name, length):
- # 注册Turtle形状,建立表针Turtle
- turtle.reset()
- Skip(-length * 0.1)
- # 开始记录多边形的顶点。当前的乌龟位置是多边形的第一个顶点学python之前需要学c语言吗。
- turtle.begin_poly()
- turtle.forward(length * 1.1)
- # 停止记录多边形的顶点。当前的乌龟位置是多边形的最后一个顶点。将与第一个顶点相连。
- turtle.end_poly()
- # 返回最后记录的多边形。
- handForm = turtle.get_poly()
- turtle.register_shape(name, handForm)
-
-
- def Init():
- global secHand, minHand, hurHand, printer
- # 重置Turtle指向北
- turtle.mode("logo")
- # 建立三个表针Turtle并初始化
- mkHand("secHand", 135)
- mkHand("minHand", 125)
- mkHand("hurHand", 90)
- secHand = turtle.Turtle()
- secHand.shape("secHand")
- minHand = turtle.Turtle()
- minHand.shape("minHand")
- hurHand = turtle.Turtle()
- hurHand.shape("hurHand")
-
- for hand in secHand, minHand, hurHand:
- hand.shapesize(1, 1, 3)
- hand.speed(0)
-
- # 建立输出文字Turtle
- printer = turtle.Turtle()
- # 隐藏画笔的turtle形状
- printer.hideturtle()
- printer.penup()
-
-
- def SetupClock(radius):
- # 建立表的外框
- turtle.reset()
- turtle.pensize(7)
- for i in range(60):
- Skip(radius)
- if i % 5 == 0:
- turtle.forward(20)
- Skip(-radius - 20)
-
- Skip(radius + 20)
- if i == 0:
- turtle.write(int(12), align="center", font=("Courier", 14, "bold"))
- elif i == 30:
- Skip(25)
- turtle.write(int(i / 5), align="center", font=("Courier", 14, "bold"))
- Skip(-25)
- elif (i == 25 or i == 35):
- Skip(20)
- turtle.write(int(i / 5), align="center", font=("Courier", 14, "bold"))
- Skip(-20)
- else:
- turtle.write(int(i / 5), align="center", font=("Courier", 14, "bold"))
- Skip(-radius - 20)
- else:
- turtle.dot(5)
- Skip(-radius)
- turtle.right(6)
-
-
- def Week(t):
- week = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"]
- return week[t.weekday()]
-
-
- def Date(t):
- y = t.year
- m = t.month
- d = t.day
- return "%s-%d-%d" % (y, m, d)
-
-
- def Tick():
- # 绘制表针的动态显示
- t = datetime.today()
- second = t.second + t.microsecond * 0.000001
- minute = t.minute + second / 60.0
- hour = t.hour + minute / 60.0
- secHand.setheading(6 * second)
- minHand.setheading(6 * minute)
- hurHand.setheading(30 * hour)
-
- turtle.tracer(False)
- printer.forward(65)
- printer.write(Week(t), align="center", font=("Courier", 14, "bold"))
- printer.back(130)
- printer.write(Date(t), align="center", font=("Courier", 14, "bold"))
- printer.home()
- turtle.tracer(True)
-
- # 100ms后继续调用tick
- turtle.ontimer(Tick, 100)
-
-
- def main():
- # 打开/关闭龟动画,并为更新图纸设置延迟。
- turtle.tracer(False)
- Init()
- SetupClock(160)
- turtle.tracer(True)
- Tick()
- turtle.done()
-
-
- if __name__ == "__main__":
- main()
读者福利:知道你对Python感兴趣,便为你准备了这套python学习资料,
对于0基础小白入门:
如果你是零基础小白,想快速入门Python是可以考虑的。
一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以找到适合自己的学习方案
包括:Python web开发,Python爬虫,Python数据分析,人工智能等学习教程。带你从零基础系统性的学好Python!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。