Pyhton少儿编程(4)turtle库

一、turtle的坐标系
turue的坐标系有两个:一个是画布在整个屏幕中的坐标系,以下简称“画布坐标系”,另一个是画笔在整个画布中的坐标系,以下简称“画笔坐标系”。
1、画布坐标系:
(1)起点坐标:画布起点坐标(0, 0)位于屏幕左上方的顶点处,向右x坐标增加,向下y坐标增加。
(2)单位:是“像素”。在Scratch图形化编程中,距离单位是“步”。Python中的“像素”和Scratch中的“步”属于同一个概念,都是表达长度的最小单元。
(3)画布设置:使用setup()函数设置画布的大小和位置。调用格式如下:turtle.setup(width, height, startx, starty)。width表示画布的宽度,height表示画布的高度,startx表示画布左上顶点的x坐标,starty表示画布左上顶点的y坐标。如下图:蓝框表示屏幕边界,红框表示画布边界。

(4)默认参数:在python中,有很多参数都是有默认值的,如果不填写参数,程序运行时就会使用默认值,如果不想使用默认值,就手动填入参数。setup()函数的四个参数都有默认值,宽度默认为屏幕宽度的50%,高度默认为屏幕高度的75%,起始坐标默认为None(居中显示)。画布的宽高,可以按照像素设定,也可以按照百分比设定;当给定的参数大于或等于1时,按照像素设定画布大小,当给定的参数介于0~1之间时,按照百分比设定画布大小。
(5)参数设定顺序:Python中参数有位置参数和关键字参数之分。位置参数传参时前面不带“变量名=”,顺序不可变,按照传参顺序赋值;关键字参数传参时前面带“变量名=”,顺序可变,按照参数名赋值。比如,turtle.setup(200, ,300),给定的是位置参数,只给定了前两个参数,此时,只能设定画布的宽度和高度,画布的起点位置使用默认值。
如果想让上面的两个参数设定为画布的起点坐标,宽度和高度使用默认值,就要使用关键字参数:turtle.setup(startx=200, starty=300),或者可以颠倒x坐标和y坐标的设定顺序:turtle.setup(starty=300, startx=200)。
2、画笔坐标系:
与画布坐标系是不同,画笔坐标系以画布的中心点为原点(0, 0),这一点跟Scartch图形化编程的坐标体系一模一样。

二、turtle的画笔体系
1、画笔的创建:
创建格式如下:t= turtle.Turtle()。t为画笔名称,turtle.Turtle()是创建画笔的函数。Turtle()函数有一个更加简短、贴切的别名:Pen()函数,注意首字母都要大写;使用方法如下:p = turtle.Pen()。
2、画笔的设置:
pensize(width)、width(width):设置画笔粗细,不加参数,返回当前画笔粗细;
penup()、pu()、up():抬笔操作,无需参数;
pendown()、pd()、down():落笔操作,无需参数;
isdown():判断画笔是否落笔,无需参数;
hideturtle()、ht():隐藏画笔图标,无需参数;
showturtle()、st():显示小乌龟图标,无需参数;
isvisible():判断画笔是否隐藏,无需参数;
shape(name):设定画笔形状,不加参数,返回当前形状名称(小海龟的形状共有6种,分别为“arrow”、“turtle”、“circle”、“square”、“triangle”和“classic”,在设定的时候,只能填入这6种名称中的一个,否则会报错);
write(arg, move=False, align='left', font=('Arial', 8, 'normal')):文字书写函数,agr是要书写的文字(字符串类型),为必选参数;move为可选参数(布尔类型),默认为False,当为True时,画笔图标会移到文字部分的右下角;align为可选参数(字符串类型),用于设定文字书写的对齐方式,有‘left’、‘center’、‘right’三个选项,默认为‘left’;font为可选参数(三元组格式),用于设定字体、大小和样式。
3、颜色的设置:
pencolor():用于返回或设置画笔颜色,颜色的设定可以使用指定的颜色字符串,如“red”、“blue”等,也可以使用RGB三元组数值表达颜色,如(255, 0, 0)表示红色,(0, 255, 255, 0)表示绿色;
fillcolor():用于返回或设置填充色,用法与pencolor()一样;
color():用于返回或设置画笔色和填充色,相当于pencolor加fillcolor,设定颜色的时候,需要给定两个颜色参数,第一个用于设定画笔颜色,第二个用于填充色;注意:如果只给了一个颜色参数,则画笔色和填充色都设定成这一种颜色;
begin_fill():设定填充起点,在填充之前调用;
end_fill():设定填充终点,为从起点到终点绘制的图形填充颜色;
turtle.bgcolor():设定背景颜色(即画布颜色)。
4、易错提醒:
(1)注意函数名称的首字母,有的是大写,有的是小写,区分原则如下:实现某种操作功能的函数(如落笔、移动),首字母小写;创建新的对象的函数(如创建画笔),首字母大写。
(2)bgcolor()函数是画布的颜色设定函数,画笔没有这个函数。
三、turtle的运动体系
1、坐标方向介绍:
在turtle画笔坐标系中,小海龟默认朝向正右方,即X轴正方向,为0度方向,逆时针向左侧方向旋转,直到旋转一周,表示0~360度;顺时针向右侧方向旋转,角度是负数。这跟数学平面直角坐标系的角度方向是一致的。

2、相关函数:
goto(x, y)、setpos(x, y=None)、setposition(x, y=None):让小海龟移到指定位置;
setx(x):设定小海龟的x坐标位置;
sety(y):设定小海龟的y坐标位置;
home():让小海龟回到原点(0, 0)位置,方向回到初始方向;
forward(distance)、fd(distance):让小海龟前进一段距离;
backward(distance)、bk(distance)、back(distance):让小海龟后退一段距离;
speed(speed):返回或设置画笔的移动速度,速度参数的取值范围为0~10之间的整数,最慢是1,随着数值增加速度加快,最快是0;
right(angle)、rt(angle):让小海龟向右转动一个角度;
left(angle)、lt(angle):让小海龟向左转动一个角度;
setheading(angle)、seth(angle):设定小海龟面向的方向;
heading():查看小海龟当前面向的方向;
dot(size):绘制小圆点,size为圆点直径,可选参数;
circle(radius, extent=None, steps=None):绘制圆或圆弧。radius代表半径,为必填参数,radius为正数时,逆时针画圆,否则顺时针画圆;extend代表绘制的角度,为可选参数,默认为360度,如果想绘制一个圆弧,改参数设定值大于0度且小于360度即可;steps代表绘制圆形或者圆弧需要的步数,即边数,为可选参数,默认系统自己指定。
注意:一个正圆实际上是用内切正多边形近似表示的,且的次数越多,多边形的边数也就越多,正多边形的边数就是steps参数代表的含义,所以,circle()函数也可以用来绘制正多边形。
四、其它需要掌握的函数
reset():清除小海龟绘制的图形,小海龟回到原点、并设置所有变量为默认值;
clear():清除小海龟绘制的图形,小海龟位置及状态保持不变;
clone():克隆当前小海龟,并返回克隆体;
stamp():印章,在当前海龟位置印制一个海龟形状,并返回印章id;
clearstamp(stampid):清除印章,stampid为必填参数,代表指定删除的印章id;
clearstamps(n=None):清除多个印章,n为可选参数,默认为None,表示删除所有印章;当n>0时,删除前n个印章,当n<0时,删除后n个印章;
undo():撤销操作;
turtle.screensize(canvwidth=None, canvheight=None, bg=None):设定或返回当前画布的尺寸,三个参数均为可选参数,前两个参数用于设定宽和高,第三个参数用于设定背景颜色,给定参数表示设置画布尺寸,否则返回画布尺寸;(注意:这是窗口的控制函数,而不是画笔的。)
turtle.mainloop()、turtle.done():停止画笔操作,但绘图窗口不会关闭,必须作为海龟程序的最后一句,因为后面的语句不会被执行。(注意:这是窗口的控制函数,而不是画笔的。)
五、综合练习
1、按照以下要求,绘制如下图形:

(1)绘制一个由两个直角三角形组成的正方形,边长为180像素;
(2)左上三角形填充蓝色,右下三角形填充红色;
(3)画笔移动速度设为1,线条为黑色;
(4)画图结束后,隐藏并停止画笔。
2、按照以下要求,绘制如下图形:

(1)正方形边长为200像素,线条颜色为黑丝;
(2)原点的直径均为20,填充颜色为红色,画完之后隐藏画笔;
(3)中间原点的圆心位置为画布正中心,3个圆心之间的距离均为40。
<完>
