我喜欢turtle绘图,因为代码一点点的改动,总会带来意想不到的惊喜。
一些让我心动过的案例,分享给大家,也珍藏给自己。
——Python教学路上的爬行者
案例1
橡皮筋球体(颜色交叉)
【效果预览】
上图中边数为6
上图中边数为9
上图中边数为11
上图中边数为12
只改动了一个数字,却带给我们意想不到的惊喜
【代码参考】
# 案例1:橡皮筋球体(颜色交叉)
# 只是在【多边形螺旋线(案例1)】代码基础上增加了一行代码而已。
# 注意27行代码,turtle.left(90),仅仅这一行代码,就使得“多边形螺旋线”代码的效果发生了巨变。
import turtle # 导入turtle 库
turtle.bgcolor('black') # 设置背景颜色为black
turtle.speed(0) # 设置海龟的绘图速度为0,最快。
turtle.delay(0) # 设置海龟绘图的延迟时间为0,绘图速度会更快。
# 如果将speed()的参数设置为0后,绘图速度还是觉得慢,就要使用delay()。
# 定义变量sides,表示多边形的边数。
# 将边数分别改为1,2,3,4,5试试效果。因为是按索引取色,所以sides不能超过6,否则会报错。
# 报错信息是“IndexError:list index out of range ”,翻译为“索引错误:列表索引超出范围”。
sides=6
# 创建颜色列表colors。列表中只有6种颜色,所以边长sides不能超过列表的长度6,
colors=['red','yellow','blue','orange','green','purple']
for x in range(360): # 循环体要执行360次。
# 变量x不仅控制循环次数,还要控制取色、步长和画笔粗细。
turtle.pencolor(colors[x%sides]) # 设置画笔颜色,将遍历colors列表中的前sides种颜色。
turtle.forward(x*3/sides+x) # 设置海龟移动的步长为x*3/sides+x。
turtle.left(360/sides+1) # sides=6时,向左旋转61度,还可尝试其他度数,如+2等。
#turtle.pensize(9) # 将画笔粗细设置为固定值9,效果也不错,只是代码功能较弱。
turtle.width(x*sides/200) # 等价于turtle.pensize(x*sides/200),
# 画笔的粗细会随着x和sides的改变而改变。
turtle.left(90) # 在绘制循环的末尾添加一个额外的90°转向,可以扭曲形状,使得角度更加尖锐。
# 运行后的结果看上去像是一个几何玩具,或者是用彩色的橡皮筋制作的球体。
turtle.hideturtle( ) # 隐藏海龟
【重难点突破】
turtle.left(90)
仅仅这一行代码,就使得“多边形螺旋线”的代码效果发生了巨变。具体可参考下面文章中的案例1。
文章链接:turtle绘图案例:多边形螺旋线
turtle.width(x*sides/200)
等价于turtle.pensize(x*sides/200)
就如fd是forward的别名,width也是pensize的别名。
这个提示功能,Python自带的编辑器中没有。我用的是Mu Editor编辑器,这个编辑器非常适合初学者使用。
加大边长,减慢速度!看细节,出真相!
在循环体的末尾添加一个额外的90°转向,可以扭曲形状,使得角度更加尖锐。
多边形螺旋线细节:取消13行代码
橡皮筋球体细节:增加13行代码
# 【橡皮筋球体】 加大边长减慢速度看细节
# 注意13行代码,代码取消或增加,结果反差巨大。
import turtle
turtle.bgcolor('black')
turtle.speed(2) # 减慢绘图速度 看细节
sides=6
colors=['red','yellow','blue','orange','green','purple']
for x in range(9):
turtle.pencolor(colors[x%sides])
turtle.forward(30*x) # 加大步长 看细节
turtle.left(360/sides+1)
turtle.pensize(9)
#turtle.left(90) #该行代码取消或增加,结果反差巨大。
turtle.hideturtle( )
案例2
橡皮筋球体(textinput交互)
【效果预览】
【代码参考】
# 案例2:橡皮筋球体(textinput交互)
# 注意27行代码,turtle.left(90),仅仅一行代码,就使得“多边形螺旋线”代码的效果发生了巨变。
# 注意13行代码,实现了textinput交互。
import turtle # 导入turtle 库
turtle.bgcolor('black') # 设置背景颜色为black
turtle.speed(0) # 设置海龟的绘图速度为0,最快
turtle.delay(0) # 设置海龟绘图的延迟时间为0,绘图速度会更快
# 如果将speed()的参数设置为0后,绘图速度还是觉得慢,就要使用delay()。
# 定义变量sides,表示多边形的边数。
# 因为是根据索引取色,所以输入的sides不能超过colors列表的长度,否则会报错。
# 报错信息是“IndexError:list index out of range ”,翻译为“索引错误:列表索引超出范围”。
sides=turtle.textinput("随心所欲控海龟","请输入边数(1~12)")
sides=int(sides) # textinput()返回的是字符串,无法参与后面的算术运算,所以要用int()将其转换成整数格式。
# 创建颜色列表colors。列表中只有12种颜色,所以边长sides不能超过12,超过12会报错。
colors=['red','yellow','blue','orange','green','purple','red','yellow','blue','orange','green','purple']
for x in range(360): # 循环体要执行360次。
# 变量x不仅控制循环次数,还要控制取色、步长和画笔粗细。
turtle.pencolor(colors[x%sides]) # 设置画笔颜色,将遍历colors列表中的前sides种颜色。
turtle.forward(x*3/sides+x) # 设置海龟移动的步长为x*3/sides+x。
turtle.left(360/sides+1) # 举例:sides=6时,向左旋转61度,还可尝试其他度数,如+2等。
#turtle.pensize(9) # 将画笔粗细设置为固定值9,效果也不错,只是代码功能较弱。
turtle.pensize(x*sides/200) # 等价于turtle.width(x*sides/200)
# 画笔的粗细会随着x和sides的改变而改变
turtle.left(90) # 在绘制循环的末尾添加一个额外的90°转向,可以扭曲形状,使得角度更加尖锐。
# 运行后的结果看上去像是一个几何玩具,或者是用彩色的橡皮筋制作的球体。
turtle.hideturtle( ) # 隐藏海龟
【重难点突破】
sides=turtle.textinput("随心所欲控海龟","请输入边数(1~12)")
textinput( )的使用方法,请参考下面文章中的案例6。有详解。
文章链接:
turtle绘图案例:螺旋文字(彩色/渐大/交互)
http://mp.weixin.qq.com/s?__biz=MzIwMjE1MTI4MA==&mid=2247500163&idx=1&sn=45792b3dbd6f737b26060d5b3b77c6bd&chksm=96e1859ca1960c8aa566edb885e90128a37cc03d77de2f52bb88cabf9441c8ff7781f854d04d&scene=21#wechat_redirect
案例3
橡皮筋球体(颜色分层)
【效果预览】
【代码参考】
# 案例3:橡皮筋球体(颜色分层)
# 只是在【多边形螺旋线(案例2)】代码基础上增加了一行代码而已。
# 注意29行代码,turtle.left(90),仅仅这一行代码,就使得“多边形螺旋线”代码的效果发生了巨变。
import turtle # 导入 turtle 库
turtle.bgcolor('black') # 设置背景颜色为black
turtle.speed(0) # 设置海龟的绘图速度为0,最快。
turtle.delay(2) # 设置海龟绘图的延迟时间为0,绘图速度会更快。
# 定义变量sides,表示多边形的边数。
# 在这个代码中,sides可以设置任意正整数。
# 因为没有用到索引,所以输入的sides大于colors列表的长度7,不会报错。
sides=6
# 创建颜色列表colors。列表的长度,就是第一层for循环将要执行的次数。
colors = ['orangered2','tomato','tan3','green1','seagreen','blue','blueviolet']
x = 0 # 变量x控制步长。如果用i控制步长,那每次取色后,步长都会从0开始,海龟画出的将是另一种效果。
for color in colors: # 变量color控制取色。colors列表中有几种颜色,循环体就要执行几次。
# 在这里colors列表中有7种颜色,所以第一层for循环要执行7次。
turtle.pencolor(color) # 设置画笔颜色,将遍历colors列表中的每一种颜色。
for i in range(70): # 循环体要执行70次。变量i控制循环次数。i将遍历0~69范围中的每一个数字
x += 1 # 将变量x增加1
turtle.forward(x*3/sides+x) # 设置海龟移动的步长为x*3/sides+x。
turtle.left(360/sides+1) # 举例:sides=6时,向左旋转61度,还可尝试其他度数,如+2等。
turtle.pensize(x*sides/350) # 等价于turtle.width(x*sides/200)。width是pensize的别名。
# 画笔的粗细会随着x和sides的改变而改变
turtle.left(90) # 在绘制循环的末尾添加一个额外的90°转向,可以扭曲形状,使得角度更加尖锐。
# 运行后的结果看上去像是一个几何玩具,或者是用彩色的橡皮筋制作的球体。
turtle.hideturtle( ) # 隐藏海龟
给代码适当的加空行,更便于阅读,
就如写作文分段一样。
【重难点突破】
双层for循环(循环嵌套)是个难点,代码的具体分析可参考下面文章中的案例2。
文章链接:turtle绘图案例:多边形螺旋线
turtle常用指令
想设置更丰富的颜色,可参考以下两篇文章:
Python专题 | turtle绘图颜色速查表
Python专题 | turtle颜色设置颜色搭配
——end——