前言最初来自于 Wally Feurzig 和 Seymour Papert 于 1966 年所创造的 Logo 编程语言
可以通过相关的指令, 轻松地绘制出精美的形状和图案
可以培养学习计算机的兴趣, 以一种娱乐的方式了解计算机的趣味
Python 海龟创意绘画, Turtle库创作精美图画
通过阅读本文, 你可以学习到LSystem的应用和掌握绘制一些图形 , 有关介绍:/wiki/L-system
turtle库 基础教程
个人推荐看官方的文档,/zh-cn/3/library/turtle.html
turtle文字的应用
一个很简单的随机文字fromturtleimport*
importrandom
str_="""
守一段情念一个人。
时光不老我们不散。
厮守终生不离不弃。
天暗下来你就是光。
亡魂溺海止于终老。
生死挈阔与子成说。
柔情似水佳期如梦。
我中有你你中有我。
青山不老为雪白头。
心若向阳无畏悲伤。
一人一心白首不离。
心如荒岛囚我终老。
我的世界只有你懂。
你若安好便是晴天。
心有灵犀一点就通。
厮守海角非你不娶。
执子的手漫漫的走。
执子之手与子偕老。
山河拱手为君一笑。
红尘初妆山河无疆。
千秋功名一世葬你。
既不回头何必不忘。
既然无缘何须誓言。
今日种种似水无痕。
明夕何夕君已陌路。
才会相思便害相思。
人来人往繁华似锦。
回首万年情衷伊人。
生能尽欢死亦无憾。
执手若无泪溅花上。
花开花落人世无常。
入我心者待以君王。
为醉而醉似醉非醉。
伤心鸿影爱已惘然。
只要你要只要我有。
日久生情日久情疏。
忧佳相随风雨无悔。
有生之年誓死娇宠
引喻山河指日可诚。
水上鸳鸯云中翡翠。
天荒地老海誓山盟。
生则同襟死则同穴。
生有此女夫复何求""".split("。")
setup(1280,720)#设置窗口大小
colormode(255)#使用的颜色模式,整数还是小数
up()
a,b=-500,280
goto(a,b)
bgcolor("black")
down()
defw(str_,b):
bgcolor(random.randint(0,255),random.randint(0,255),random.randint(0,255))#随机生成RGB值,每次调用函数改变背景颜色
foriinrange(len(str_)):
up()
goto(a+100*i,b)
down()
size=random.randint(12,68)#随机字体大小
color(random.randint(0,255),random.randint(0,255),random.randint(0,255))#随机字体颜色
write(str_[i],align="center",font=("楷体",size))
forkinrange(4):
foriinrange(7):
w(str_[i+7*k],b-100*i)
reset()#清屏
foriinrange(7):
w(str_[i+7*4],b-100*i)
简单的图形例子
主要是通过改变角度和位置偏移, 做出各种效果fromturtleimport*
speed(0)
bgcolor("white")
pencolor("MediumAquamarine")
h=10
forjinrange(360):
foriinrange(4):
forward(h)
right(90)
right(3)
h=h*1.01
Lsystem 的应用
实质是通过不断变换规则, 绘制出各种发杂图形
以下符号字符的几何解释。#字符含义1F按行绘制一条线向前移动
2f按线条长度向前移动而不绘制线条
3+通过转动角度向左转动
4-通过转动角度向右转动
5/反向(即:转动180度)
6[将当前绘图状态推入堆栈
7]从堆栈弹出当前绘图状态
8#按线宽增量增加线宽
9!通过线宽增量减小线宽
10@绘制带有线宽半径的点
12}关闭多边形并用填充颜色填充
13
14>将线长除以线长比例因子
15&交换+和 - 的含义
16(通过转动角度增量减小转动角度
17)通过转动角度增量来增加转动角度
18{打开多边形函数介绍
draw_path(length, angle, path, expalnation)length ---->每次行走的距离
angle---->偏移的角度
path---->初始路径图案,即0阶的形状
expalnation---->用来记录打印每一步操作
主要用来绘制海龟行走路径
apply_rules(path, rules)path---->初始路径图案,即0阶的形状
rules ---->转换的规则
主要是转换每一阶段的path
getColor()提供一个随机rgb值
initialization()初始化各种参数
Introduction(x=-600, y=-350)默认海龟初始位置(-600,-350)
注解
run(n,angle,length,path,rules)
启动程序
实现如下:#-*-coding:utf-8-*-
#Time:/4/522:20
#Author:Mifen
#Email:2952277346@
#Github:/Amd794
importtime
importturtleast
fromturtleimport*
setup(1280,720)
t.speed(0)
t.pensize(1)
length=5
path='FX'
angle=25
up()
color("#262626;")
goto(-600,300)
write('Author:Mifen',font=("微软雅黑",18))
goto(-600,250)
write('E-mail:2952277346@',font=("微软雅黑",18))
goto(-600,200)
write('Code:/Amd794/Python123',font=("微软雅黑",18))
goto(-600,-350)
down()
expalnation={
'F':'画线',
'x':'-',
'+':'逆时针旋转',
'-':'顺时针旋转',
'[':'记录当前位置',
']':'恢复上一个位置',
'a':'上色',
'b':'上色',
'c':'上色'
}
rules={
'F':'aFF-[b-F+F]+[c+F-F]',
'X':'aFF+[b+F]+[c-F]'
}
defdraw_path(path,expalnation):
posList,angleList=[],[]
t.up()
t.goto(0,-350)
t.down()
t.lt(90)
forsymbolinpath:
ifsymbol=='F':
t.forward(length)
elifsymbol=='+':
t.left(angle)
elifsymbol=='-':
t.rt(angle)
elifsymbol=='[':
posList.append(t.pos())
angleList.append(t.heading())
elifsymbol=='a':
t.pensize(3)
t.color("#8c503c")
elifsymbol=='b':
t.pensize(2)
t.color("#4ab441")
elifsymbol=='c':
t.pensize(2)
t.color("#18b418")
elifsymbol==']':
t.up()
t.home()
t.goto(posList.pop())
t.left(angleList.pop())
t.down()
defapply_rules(path,rules):
L=[_for_inpath]
foriinrange(len(L)):
symbol=L[i]
ifsymbol=='F':
L[i]=rules[symbol]
ifsymbol=='X':
L[i]=rules[symbol]
path=''.join(L)
returnpath
for_inrange(5):
path=apply_rules(path,rules)
draw_path(path,expalnation)
综合:#-*-coding:utf-8-*-
#Time:/4/622:45
#Author:Mifen
#Email:2952277346@
#Github:/Amd794
fromturtleimport*
importtime
importturtleast
defgotopos(x,y):
up()
goto(x,y)
down()
ht()
defauthor():
pensize(2)
gotopos(610,-315)
lt(-90)
fd(80)
pensize(1)
lt(-270)
gotopos(525,-330)
color("#772a2b")
write("Mifen",font=("华文隶书",24))
gotopos(409,-360)
write("2952277346@",font=("华文隶书",18))
gotopos(250,-390)
write("/Amd794/Python123",font=("华文隶书",18))
defapply_rules(path,rules):
L=[_for_inpath]
foriinrange(len(L)):
symbol=L[i]
ifsymbol=='F':
L[i]=rules[symbol]
ifsymbol=='X':
L[i]=rules[symbol]
path=''.join(L)
returnpath
defdraw_path(path):
posList,angleList=[],[]
forsymbolinpath:
ifsymbol=='F':
t.forward(length)
elifsymbol=='+':
t.left(angle)
elifsymbol=='-':
t.rt(angle)
elifsymbol=='[':
posList.append(t.pos())
angleList.append(t.heading())
elifsymbol=='a':
t.pensize(3)
t.color("#867b68")
elifsymbol=='b':
t.pensize(2)
t.color("#867b68")
elifsymbol=='c':
t.pensize(2)
t.color("#867b68")
elifsymbol==']':
t.up()
t.home()
t.goto(posList.pop())
t.left(angleList.pop())
t.down()
defwritez(x,y,str_,size=56,font="华文行楷"):
gotopos(x,y)
write(str_,font=(font,size))
setup(1280,800)
speed(5)
bgcolor("#9c917f")
color("#afa697")
begin_fill()
gotopos(0,-400)
circle(400)
end_fill()
author()
color("#7d776d")
s="愿天化作比翼鸟"
s2="在地愿为连理枝"
foriinrange(len(s)):
writez(560,350-i*50,s[i],36)
foriinrange(len(s2)):
writez(460,350-i*50,s2[i],36)
color("#888475")
writez(-50,100,"我")
writez(-50,40,"的")
writez(-160,0,"心",96)
writez(-50,0,"月",176)
writez(33,-30,"代",62)
writez(-18,-95,"表",78)
writez(-213,-210,"亮",196)
gotopos(249,-26)
color("#867b68")
speed(0)
gotopos(-650,-100)
length=6
path='F'
angle=27
rules={
'F':'aFF[b-F++F][c+F--F]c++F--F',
'X':'aFF+[b+F]+[c-F]'
}
for_inrange(4):
path=apply_rules(path,rules)
draw_path(path)
gotopos(570,-330)
done()
如果觉得《python123创意绘画_Turtle 创意绘画》对你有帮助,请点赞、收藏,并留下你的观点哦!