1
Python编程从入门到实践
1.14.1.1 10.1.1 画直线的小海龟turtle
10.1.1 画直线的小海龟turtle

1.小海龟画线段

打开Python程序的开发工具,使用Python Shell中的文件编辑器编写代码,并新建一个程序文件。

【例10.1】引入turtle库,在屏幕上绘制一条线段。

解析:turtle库绘制图形有一个基本框架:想运用Python画图时,导入turtle库,召唤小海龟,让小海龟在坐标系中爬行,其爬行轨迹形成了绘制图形。刚开始绘制时,小海龟位于画布正中央,此处坐标为(0,0),前进方向为水平右方。

单击“Run”→“Run Module”,保存文件,输入想保存的名字,例如turtle_1.py,然后运行程序,可以看到运行结果如图10-1所示。运行程序后,小海龟在屏幕上画了一条线段,然后朝左转了90度,停了下来,绘图结束。

程序代码中的相关知识:

本例题第一行代码import turtle是导入turtle库,为了使用Turtle函数库的功能,需要使用import语句将该函数库导入目前的程序中。使用import保留字对turtle库进行引用有如下3种方式,效果相同。

①import turtle,则对turtle库中函数调用采用turtle.<函数名>()形式。

例如:import turtle

turtle.circle(200)

②from turtle import*,则对turtle库中函数调用采用<函数名>()形式,不再使用turtle.作为前导。

图10-1 屏幕上绘制一条线

例如:from turtle import*

circle(200)

或者仅导入所使用的函数。

例如:from turtle import circle

circle(200)

③import turtle as t,保留字as将turtle库给予别名t,则对turtle库中函数的调用采用更简洁的t.<函数名>()形式。

例如:import turtle as t

t.circle(200)

本例题第二行代码turtle.shape("turtle")是设置画笔的形状,在turtle.shape()的括号里填入TurtleScreen的形状库,例如arrow(箭头)、turtle(小海龟)、circle(实心圆形●)、square(实心正方形■)、triangle(三角形▲)和classic(默认为箭头),括号里的内容决定了小海龟的样子。

导入相应的函数库之后,便可以使用该函数库提供的各类函数进行相应的绘图操作,例如:turtle.forward(distance),作用是沿着小海龟的朝向,向前移动指定的距离(distance);turtle.right(angle),是改变画笔行进方向为当前方向向右旋转angle角度;turtle.left(angle),是向左旋转angle角度,angle是角度相对值,角度的整数值。本例题的第三行代码turtle.forward(100)控制小海龟向前走100个像素;第四行代码turtle.left(90),让小海龟左转90度;第五行代码turtle.done(),结束当前的绘制工作。

2.小海龟画正方形

【例10.2】通过不断地绘制线段和右转90度,在屏幕上绘制正方形。

解析:这里提出了一个最重要的格式控制——缩进(indentation),必须使用4个空格来表示向右缩进,支持Tab字符。缩进代表了程序段落之间的关系,例如下面程序中,因为for语句后的两条语句向右缩进了,所以它们表示这两条语句是循环真正需要执行的代码,即循环体。

单击“Run”→“Run Module”,保存文件并运行程序。通过for语句将向前和右转重复执行4次,便可以在屏幕上绘制一个如图10-2所示的正方形,也可在第6行代码前增加一行代码turtle.hideturtle(),隐藏掉小海龟,如图10-3所示。

图10-2 绘制的正方形

图10-3 隐藏小海龟的正方形

3.画正多边形

【例10.3】在屏幕上绘制正多边形。

解析:正多边形内角计算公式:内角=(边数-2)×180/边数,通过内角计算公式算出正多边的内角,再通过外角计算公式,算出外角,可以给定正多边形的边数和图形填充颜色,任意画出自己想要的正多边形。

运行程序后,输入正多边形具体边数和正多边形填充的颜色。

例如:Please input the num of the polygon:6

Please input the color of the fillcolor:yellow

运行结果如图10-4所示。

图10-4 根据给定的值绘制的正多边形

扫码查看彩图

4.小海龟绘制美丽的五角星

【例10.4】通过使用循环机制绘制五角星,并为五角星上色。

解析:通过bgcolor()函数设置画布背景颜色;color()函数中的参数可以是一个代表着不同颜色的英文单词,也可以是三个分别表示红色、绿色、蓝色的数值(该数值必须在十六进制数00~FF之间);使用begin_fill()函数和end_fill()函数为五角星填充颜色。循环的次数设置为5次,是在屏幕上绘制5个相同的尖角;每一次的循环内容都是从海龟的当前位置出发,先绘制一条短边,然后向右转144°,再绘制另外一条短边,这样就构成了五角星的一个尖角。

运行上述程序,可以在屏幕上看到小海龟绘制一颗背景为黄色、笔触为红色的五角星,最后看到小海龟绘制的五角星填充颜色默认为笔触颜色红色,效果如图10-5所示。

图10-5 绘制美丽的五角星

扫码查看彩图

5.绘制大星星和小星星

【例10.5】通过函数的参数实现不同的函数调用效果。

解析:在定义函数的过程中,可以预先使用一组变量(x,y,c)来代表需要让海龟移动到的坐标信息和填充的颜色信息,然后在函数调用时再去传递一个确切的实际参数。函数定义中代表参数的变量,称为形式参数,在函数定义的过程中,它们并没有确切的值,而函数定义中传递给函数的参数则称为实际参数。

接下来的程序将会调用上面定义的函数进行星星的绘制。

使用def开始的代码即为定义函数的语句,从该行开始缩进的程序内容即为函数的函数体。一个函数定义完毕后,调用了一次drawstar()函数,所以只会在屏幕上绘制一颗星星,如果要在屏幕上绘制更多的星星,则需要修改代码goto语句中的x、y参数,移动海龟到指定的位置绘制星星。运行上述程序,可以在屏幕上看到小海龟绘制五颗大小相同,颜色和位置不同的小星星,如图10-6所示。

图10-6 绘制五颗大小相同、颜色和位置不同的小星星

扫码查看彩图

6.绘制五星红旗

【例10.6】绘制五星红旗。

解析:中华人民共和国国旗是五星红旗,旗面为红色。国旗尺寸不是统一的,长宽比例为3∶2。左上方缀黄色五角星五颗,四颗小星环拱在一颗大星的右边,并各有一个角尖正对大星的中心点。

运行上述代码可以在屏幕上看到小海龟绘制了五颗背景为红色、笔触为黄色的大小不一的五角星,如图10-7所示。可以看到小海龟将绘制的五角星填充上黄色,构成了一面五星红旗。但单纯地使用turtle函数库很难做到四颗小星的角尖都对准大星的中心点,需要增加Python math模块提供了更多的数学运算。

图10-7 绘制五星红旗

扫码查看彩图

程序代码中的相关知识:

(1)turtle.setup(width=0.5,height=0.75,startx=None,starty=None)或turtle.setup(width=800,height=800,startx=100,starty=100)

作用:展开用于绘图的区域,可以设置主窗体的大小和初始位置。

参数:width,height:输入宽和高为整数时,表示像素;为小数时,表示占据电脑屏幕的比例。

startx,starty:这一坐标表示矩形窗口左上角顶点的位置;如果为空,则窗口位于屏幕中心。startx的值是空,窗口位于屏幕水平中央;starty的值是空,窗口位于屏幕垂直中央。

(2)turtle.setheading(angle)

作用:设置当前朝向为angle角度。turtle库的角度坐标体系以正东方向为绝对0°,这也是小海龟的初始爬行方向,正西方向为绝对180°。因此,可以利用这个绝对坐标体系随时更改小海龟的前进方向。