- 09
- 9
- 4
- 文章类型
- 完全原创 —— 转载请标注作者
Python与turtle库
turtle(乌龟)是Python中一个绘制图像的函数库。1967年,Seymour Papert在Logo语言中创造了Turtle绘图。Python继承了Turtle。
可以想象为一只小乌龟,在一个以X为横轴、Y为纵轴的坐标轴上,从坐标系原点,即(0,0),位置开始,根据一组函数指令的控制,在这个平面坐标系中移动,它爬行的路径其实就是绘制的图形。
这是Python编程可视化的一种,简单、直观、易于操作,非常适合培养初学者的兴趣,有助于他们了解Python语言的规则和库的调用方法。
起因
每年十月中旬,信带都会召开绰号为“百团大战”的校级社团招新活动,为了让DH的招新不只有抽象要素,我与若熙在讨论准备一些能够体现社团特色的小游戏供小东西们现场玩耍。
小游戏的设计思路:
1.最好与计算机、编程语言等有关,体现社团的特色。
2.难度低,因为小东西们大多数没有深入学习过编程,不能为难他们。
3.有一套标准化的模板,最好能让小东西现场模仿并学会一些简单的编程语句。
4.简洁直观,招新最重要是引起小东西的兴趣,视觉获取到的信息是最多的,但是纯文字代码的繁杂反而会吓退小东西。
于是我们想到了可视化编程,诸如scratch之类,但是scratch并不是使用C或Python等大学中泛用的编程语言操作,并不能培养小东西初步掌握这些主流语言的能力,所以我又想到了Python内置的turtle库。Python本身就不算高难度的编程语言,而其中调用turtle库的部分的指令也不复杂。
接下来就是怎么使用turtle库设计一个可以让小东西现场玩耍的项目。turtle库的玩法无非就是使用命令操作画笔画图,那么我们真正要考虑的就是画什么。图形要简单,因为turtle库的画笔并不灵敏,复杂的图形难以实现;还要能体现出社团的特点。
若熙建议我使用社团的钥匙扣作为小游戏的奖品。钥匙扣的一面是DH的社标,另一面是DH的赛博猫娘。
等等?社标!社标的图形不复杂,正好可以作为目标图案。于是这个计划就这样确定下来了。
过程
但是呢,摆大烂的老东西们除了留下了一个社标的位图(还不是矢量图,糊的一批的同时还带锯齿),就没有更多关于社标的信息了。
没有尺寸你让我怎么画?不过,这不是问题。社标的构成并不复杂,基本上是圆形和矩形的拼接,那么我只需要稍加尝试就可以确定尺寸了。说到画圆和矩形,这可是工程制图软件的强项——SolidWorks,启动!谁说三维软件就不能画平面了?
稍微折腾了一下,试出了社标的尺寸。(放在这里,便于以后要用时参考)
那么,接下来就是在Python中调用turtle库完成画图了。(代码如下)
至此,大功告成!
尾声
我特意按照统一的格式书写各个段落,便于小东西自己模仿和领悟。我也没有使用条件语句或者循环,尽量保持语句的单一和简洁。
当然,也许会有更加好的命令组合,欢迎您提出自己的见解。
turtle(乌龟)是Python中一个绘制图像的函数库。1967年,Seymour Papert在Logo语言中创造了Turtle绘图。Python继承了Turtle。
可以想象为一只小乌龟,在一个以X为横轴、Y为纵轴的坐标轴上,从坐标系原点,即(0,0),位置开始,根据一组函数指令的控制,在这个平面坐标系中移动,它爬行的路径其实就是绘制的图形。
这是Python编程可视化的一种,简单、直观、易于操作,非常适合培养初学者的兴趣,有助于他们了解Python语言的规则和库的调用方法。
起因
每年十月中旬,信带都会召开绰号为“百团大战”的校级社团招新活动,为了让DH的招新不只有抽象要素,我与若熙在讨论准备一些能够体现社团特色的小游戏供小东西们现场玩耍。
小游戏的设计思路:
1.最好与计算机、编程语言等有关,体现社团的特色。
2.难度低,因为小东西们大多数没有深入学习过编程,不能为难他们。
3.有一套标准化的模板,最好能让小东西现场模仿并学会一些简单的编程语句。
4.简洁直观,招新最重要是引起小东西的兴趣,视觉获取到的信息是最多的,但是纯文字代码的繁杂反而会吓退小东西。
于是我们想到了可视化编程,诸如scratch之类,但是scratch并不是使用C或Python等大学中泛用的编程语言操作,并不能培养小东西初步掌握这些主流语言的能力,所以我又想到了Python内置的turtle库。Python本身就不算高难度的编程语言,而其中调用turtle库的部分的指令也不复杂。
接下来就是怎么使用turtle库设计一个可以让小东西现场玩耍的项目。turtle库的玩法无非就是使用命令操作画笔画图,那么我们真正要考虑的就是画什么。图形要简单,因为turtle库的画笔并不灵敏,复杂的图形难以实现;还要能体现出社团的特点。
若熙建议我使用社团的钥匙扣作为小游戏的奖品。钥匙扣的一面是DH的社标,另一面是DH的赛博猫娘。
等等?社标!社标的图形不复杂,正好可以作为目标图案。于是这个计划就这样确定下来了。
过程
但是呢,摆大烂的老东西们除了留下了一个社标的位图(还不是矢量图,糊的一批的同时还带锯齿),就没有更多关于社标的信息了。
没有尺寸你让我怎么画?不过,这不是问题。社标的构成并不复杂,基本上是圆形和矩形的拼接,那么我只需要稍加尝试就可以确定尺寸了。说到画圆和矩形,这可是工程制图软件的强项——SolidWorks,启动!谁说三维软件就不能画平面了?
稍微折腾了一下,试出了社标的尺寸。(放在这里,便于以后要用时参考)
那么,接下来就是在Python中调用turtle库完成画图了。(代码如下)
Python:
#原则:尽量使用简单的命令,尽量少用几种,但是要涵盖库的基本命令
import turtle as t#引用turtle库,并简称其为t
t.setup(1000,1000)#展开尺寸为1000像素的正方形画布
t.penup()#抬起画笔
t.goto(0,-400)#移动画笔到坐标位置
t.pencolor('black')#设置画笔颜色为黑色
t.pendown()#落下画笔
t.fillcolor('black')#设置填充颜色
t.begin_fill()#开始填充
t.circle(400)#画半径为400的圆
t.end_fill()#结束填充
#下面基本上也遵循抬笔,移动,换色,落笔,开始填充,绘画,结束填充的格式
#统一格式的话,小东西可以照抄上面的,下面的也许他们自己就会写了
t.penup()
t.goto(-125,-225)
t.pencolor('white')
t.pendown()
t.fillcolor('white')
t.begin_fill()
t.circle(225)
t.end_fill()
t.penup()
t.goto(-125,-175)
t.pencolor('black')
t.pendown()
t.fillcolor('black')
t.begin_fill()
t.circle(175)
t.end_fill()
t.penup()
t.goto(0,400)
t.pendown()
t.pencolor('black')
t.fillcolor('black')
t.begin_fill()
t.right(90)#画笔右转90度
t.forward(800)#画笔前进800(沿当前方向画一条长度为800的直线)
t.left(90)
t.circle(400,180)#第二个参数为画圆的圆心角,这里是一个半圆
t.end_fill()
t.penup()
t.goto(0,160)
t.pencolor('white')
t.pendown()
t.fillcolor('white')
t.begin_fill()
t.forward(50)
t.left(90)
t.forward(320)
t.left(90)
t.forward(50)
t.left(90)
t.forward(320)
t.end_fill()
t.penup()
t.goto(125,-225)
t.pendown()
t.fillcolor('white')
t.begin_fill()
t.right(90)
t.circle(225,180)
t.left(90)
t.forward(450)
t.end_fill()
t.penup()
t.goto(125,-175)
t.pencolor('black')
t.pendown()
t.fillcolor('black')
t.begin_fill()
t.left(90)
t.circle(175,180)
t.left(90)
t.forward(350)
t.end_fill()
t.penup()
t.goto(0,300)
t.pendown()
t.fillcolor('black')
t.begin_fill()
t.forward(600)
t.left(90)
t.forward(175)
t.left(90)
t.forward(600)
t.left(90)
t.forward(175)
t.end_fill()
t.penup()
t.goto(50,25)
t.pencolor('white')
t.pendown()
t.fillcolor('white')
t.begin_fill()
t.left(180)
t.forward(260)
t.right(90)
t.forward(50)
t.right(90)
t.forward(260)
t.right(90)
t.forward(50)
t.end_fill()
t.done#结束绘制
至此,大功告成!
尾声
我特意按照统一的格式书写各个段落,便于小东西自己模仿和领悟。我也没有使用条件语句或者循环,尽量保持语句的单一和简洁。
当然,也许会有更加好的命令组合,欢迎您提出自己的见解。
最后编辑: