当前位置 博文首页 > 汉阳Hann's Home:Python turtle库——如何瞬间完成作图?难道只
作为一个74年出生的中年业余玩家,第一次进CSDN周创作榜,恰好呢还是第74名,真的真的有点小窃喜。容我陶醉一下,这算不算凡尔赛?
好吧,言归正传。先问一下,大家有没有在小霸王学习机上用过LOGO语言呢?小霸王学习机是成龙代言的,用过的朋友,岁数也都不小了吧?用各种各样的插卡可以换节目,学习、游戏都有。隐约记得其中有个“海龟画图”的程序,其实它就是LOGO语言,或者说是一个子集。
LOGO语言简介
20世纪60年代,美国麻省理工学院人工智能实验室的西摩尔·帕伯特专为孩子们设计了一种叫LOGO的计算机语言,是一种易学、易懂、易于掌握的结构化程序设计语言,出发点是将原本较为枯燥的程序设计形象化,希望学生不要机械地记忆事实,使学生在掌握了为数不多的LOGO原始命令后,能在发现和探索中学习,通过操纵屏幕上的海龟来学习编写程序,强调创造性的探索能给学生严密的计算思维和有趣的学习体验。它具有三部分功能:一是编辑功能,可以进行命令与过程的编辑,使学生们了解成年人是怎样进行文字编辑工作的;二是驱使海龟移动业绘出各种图形的功能,即海龟作图功能;三是字表处理与数值处理的功能。
LOGO语言是一种结构化程序设计语言。它是交互式的,为人们提供了良好的编程环境;它是模块化的,便于程序的修改与扩充;它是过程化的,包含了过程、参数、变量等重要概念,并允许递归调用;它有丰富的数据结构类型;有生动的图形处理功能。它不仅具备多种优秀程序设计语就能掌握LOGO的基本绘图指令,高年级学LOGO程序设计自然不是难事。 ——摘自百度百科
如今python的turtle库把它给复活了,python2.6版本开始引入了turtle库,也能海龟作图了!
?
>>> import turtle as t
>>> t.__all__
['ScrolledCanvas', 'TurtleScreen', 'Screen', 'RawTurtle', 'Turtle',
'RawPen', 'Pen', 'Shape', 'Vec2D', 'addshape', 'bgcolor', 'bgpic',
'bye', 'clearscreen', 'colormode', 'delay', 'exitonclick', 'getcanvas',
'getshapes', 'listen', 'mainloop', 'mode', 'numinput', 'onkey', 'onkeypress',
'onkeyrelease', 'onscreenclick', 'ontimer', 'register_shape', 'resetscreen',
'screensize', 'setup', 'setworldcoordinates', 'textinput', 'title', 'tracer',
'turtles', 'update', 'window_height', 'window_width', 'back', 'backward',
'begin_fill', 'begin_poly', 'bk', 'circle', 'clear', 'clearstamp', 'clearstamps',
'clone', 'color', 'degrees', 'distance', 'dot', 'down', 'end_fill', 'end_poly',
'fd', 'fillcolor', 'filling', 'forward', 'get_poly', 'getpen', 'getscreen',
'get_shapepoly', 'getturtle', 'goto', 'heading', 'hideturtle', 'home', 'ht',
'isdown', 'isvisible', 'left', 'lt', 'onclick', 'ondrag', 'onrelease', 'pd',
'pen', 'pencolor', 'pendown', 'pensize', 'penup', 'pos', 'position', 'pu',
'radians', 'right', 'reset', 'resizemode', 'rt', 'seth', 'setheading',
'setpos', 'setposition', 'settiltangle', 'setundobuffer', 'setx', 'sety',
'shape', 'shapesize', 'shapetransform', 'shearfactor', 'showturtle', 'speed',
'st', 'stamp', 'tilt', 'tiltangle', 'towards', 'turtlesize', 'undo',
'undobufferentries', 'up', 'width', 'write', 'xcor', 'ycor',
'write_docstringdict', 'done', 'Terminator']
>>>
来挑几个常用的回忆下“小时候”的感觉:
命令 | 说明 |
.forward() | fd( ) | 向当前画笔方向移动distance像素长 |
.backward() | bd( ) | back( ) | 向当前画笔相反方向移动distance像素长度 |
.right() | rt() | 顺时针移动degree° |
.left() | lt() | 逆时针移动degree° |
.pendown() | 移动时绘制图形,缺省时也为绘制 |
.penup() | 移动时不绘制图形,提起笔,用于另起一个地方绘制时用 |
.pensize(width) | 绘制图形时的宽度 |
.pencolor() | 画笔颜色 |
.fillcolor() | 绘制图形的填充颜色 fillcolor(colorstring) |
.color() | 同时设置pencolor=color1, fillcolor=color2 |
.filling() | 返回当前是否在填充状态 |
.begin_fill() | 准备开始填充图形 |
.end_fill() | 填充完成 |
.setheading() | seth() | 设置当前朝向为某个角度 |
.position() | pos() | 返回乌龟当前的位置 (x,y) |
.goto(x,y) | setpos() | setposion() | 将画笔移动到坐标为x,y的位置 |
.setx()、.sety() | 将当前x轴、y轴移动到指定位置 |
.xcor()、.ycor() | 返回画笔x、y坐标 |
.degrees() | ?将角度设置为度量单位,degrees(fullcircle=360.0 ) |
.radians() | ?将弧度设置为角度度量单位,相当于degrees(2*math.pi) |
.home() | 设置当前画笔位置为原点,朝向东 |
.speed(speed) | 画笔绘制的速度,speed范围0~10 |
.circle() | 画圆,半径为正(负),表示圆心在画笔的左边(右边)画圆 |
.dot() | 使用给定颜色绘制给定直径大小的圆点 dot(size=None, *color) |
.hide() | 隐藏箭头显示 |
.show() | 与hideturtle()函数对应 |
.clear() | 清空turtle窗口,但是turtle的位置和状态不会改变 |
.reset() | 清空窗口,重置turtle状态为起始状态 |
.undo() | 撤消(重复)最后一次动作,撤消操作数由取消缓冲区的大小决定 |
.isvisible() | 返回当前turtle是否可见 |
.stamp() | 复制乌龟形状的副本在当前canvas上,返回stamp_id |
.clearstamp(stampid) | 删除给定stamp_id对应的标记 |
.clearstamps(n=None) | 删除标记的全部或前/后n个 |