我正在参加「掘金·启航计划」
turtle库用法之“数码分离”
turtle库因其简单易用、功能强大深得python语言用户的喜爱。对各种“素描”图形,只要你能想的到,用turtle就能画出来。
Turtle库编写代码可以用傅里叶函数方法,也可以用简单的“前进、后退、转弯、起落”的普通方法。对于初学者,使用普通方法的居多。普通方法好理解,上手快,但是代码冗长,重复书写的工作量很大,查找代码错误也不方便。
"数码分离"可以较好的解决普通方法中存在的这些问题。这里的“数”是指程序中turtle“前进、后退、转弯、起落”的数值或者数值标记”。“码”是指代码。
举例:用turtle绘制一个三棱立体图形。
绘制这样一个图形大约需要“进退、转弯、起落”等动作数据44个,仅这44个动作普通写法需要44行代码。采用“数码分离”方法处理这44个数据,只需要5行代码即可。
绘制动作函数
def rdata():
t.fd(datals[i][1]) #按照第i组数据的第1列前进
if datals[i][2]: #设定第i组数据的第2列的数字不是0时的转向方向
t.rt(datals[i][3]) #按照第i组数据的第3列数值角度顺时针转向
else:
t.lt(datals[i][3]) #按照第i组数据的第3列数值逆时针转向
以下是绘制三棱立体图的全部代码和数,供参考。
# 引入数据库
import turtle as t
# 基础设置
t.title('数码分离自动绘图')
t.setup(800, 600, 0, 0)
t.pencolor("red")
t.pensize(5)
# 绘制动作函数
def rdata():
t.fd(datals[i][1])
if datals[i][2]:
t.rt(datals[i][3])
else:
t.lt(datals[i][3])
#数据读取
datals = []
with open("data3.txt") as f:
for line in f:
line = line.replace("\n","")
datals.append(list(map(eval, line.split(","))))
#自动绘制
for i in range(len(datals)):
if datals[i][0]:
t.pendown()
rdata()
else:
t.penup()
rdata()
t.done()
data3.txt数
1,160,0,120
1,160,0,120
1,160,0,150
1,160,1,105
0,85,0,105
1,160,0,150
1,160,1,120
1,160,1,120
1,160,0,0
0,-160,1,90
1,160,0,0