一、课程回顾
在前一节课程中,我们介绍了Python语言的历史、Python语言的特点,以及如何安装配置Python编程环境(海龟编辑器)、写出我们第一个程序“Hello,world”。
在上一课的末尾我们留了一个问题,为什么要写“Hello,world!” 程序?它有什么用?
如你所见,这个程序运行的时候,在海龟编辑器下方的终端区域(就是黑黑的部分)输出了这句话,其它还真没有什么用。那么为什么要写它呢?有以下两点:
- 这是一个非常简单的程序,当我们学习一门新语言的时候,总要进行开发环境的配置,完成后写一个简单的程序,来运行测试一下。如果它能输出预期的结果,说明你安装的环境已经能够正常运行了,这是值得庆贺的事情。因为据调查,有许多人都是卡在第一步,环境都没配置好,干脆就放弃了。
- 至于为什么要输出“Hello,world”而不是别的内容,这句话来自《The C Programming Language》(C编程语言,一本经典的学习C语言的图书),“Hello,world”是这本书的第一个演示程序。后来的程序员在学习编程或进行设备调试时延续了这一习惯。也就是说,这是个约定俗成的东西,是很多人学习程序的第一个作品,如果你连它都不知道,就会被人笑话孤陋寡闻了。
“Hello,world”,翻译过来就是“你好,世界”,是你用程序语言向世界打的第一声招呼,意思是:我来了,我准备好啦!
那么,你准备好了吗?
让我们先来做点有趣的。
二、认识“小海龟”
还记得我们在Scratch中使用过的“画笔”扩展吗?
当我们需要使用Scratch画图的时候,我们会先把画笔这个扩展模块添加进来,然后你就可以使用画笔指令配合角色的移动、旋转画出丰富多彩的图案,甚至可以画出动画作品。最常用的画笔指令是全部清除、落笔、抬笔、设置笔的颜色和粗细等。我们可以想象在落笔的时候,角色在舞台上移动的轨迹被“画”下来了,而抬笔的时候就不再画这些轨迹,利用这个简单的原理,我们已经创作了许多有趣的作品。
下面这是一个简单的Scratch画笔应用程序,我们可以简单地回顾一下:
与Scratch类似,Python也提供了用于画图的扩展模块,称为Turtle库(即“小海龟”),你可以把小海龟理解为Scratch中的角色,只要我们控制这只小海龟的移动,同样可以在舞台(画布)上画出漂亮的图案(编程猫提供的Python学习工具为什么叫“海龟编辑器”呢?可能也是与这只小海龟有关系吧!)。不过,Python提供的小海龟可是比Scratch要强大多了,上次课程我们画的那棵漂亮的小树就是用它“画”的,只是我们目前还不需要做这么复杂的画图程序,让我们先从小海龟开始,体验一下Python这门编程语言的强大之处。今天所讲的内容你不一定完全理解,只要跟着老师的节奏把代码写出来,能运行得到同样的效果就可以。以后我们会随着学习的深入逐步理解程序的写法。
让我们打开“海龟编辑器”,写出下面这四行代码:
import turtle
turtle.shape('turtle')
turtle.forward(100)
turtle.done()
运行程序,你会看到一只小海龟从窗口(也就是Scratch中的舞台,对小海龟来说叫“画布”)中央向右边“爬行”了100步,在它的身后留下了一条短短的直线。
是不是很像Scratch中的画图?就是这么简单。让我来解释一下程序: – 第一行“import turtle”是导入小海龟模块,类似于Scratch中加载画笔扩展; – 第二行设置了小海龟的样子,实际上,正如我们在Scratch中画图的角色可以不止有一种一样,Python画图也不一定要用“小海龟”角色,如果你不写这行代码,它默认显示的是一个小箭头,但作用是一样的,都能画图; – 第三行,小海龟执行forward指令,forward就是英语单词前进的意思,括号中的数字是移动的距离,在Scratch称为步数,在Python中称为按照屏幕上的点计算,称为像素。这条指令类似于Scratch中的“移动100步”。相应地,小海龟还有一个指令叫backward(后退),当然,它相当于Scratch中的移动 -XX步(移动负数步); – 第四行,画图结束,让小海龟保留不消失,等待我们操作
小海龟支持的指令是非常丰富的,我们现在先掌握要用到的几个常用指令:
指令 | 指令翻译 | 作用 |
---|---|---|
forward() | 前进 | 向前移动指定距离 |
backward() | 后退 | 向后移动指定的距离 |
left() | 左转 | 小海龟向左转指定的度数 |
right() | 右转 | 小海龟向右转指定的度数 |
goto() | 移到 | 对应Scratch中的移动到(x,y)坐标位置 |
home() | 回家 | 小海龟回到屏幕中央,坐标为(0,0)的原点 |
circle() | 画圆 | 画出指定大小的圆形 |
pendown() | 落笔 | 对应Scratch中的落笔指令 |
penup() | 抬笔 | 对应Scratch中的抬笔指令 |
pencolor() | 画笔颜色 | 对应Scratch中设置画笔颜色指令 |
pensize() | 画笔粗细 | 对应Scratch中设置画笔粗细指令 |
done | 结束 | 在画图程序最后使用,保持图像不消失 |
以上这些指令我们会在下面的例子中讲解它们的使用方法。其实,这些指令都是它们对应指令的英文单词,如果你认识这些单词,那根本不需要记忆——所以说学编程还是尽量学好英语啊!
有了这些指令,我们就可以做点东西出来。
三、利用小海龟画图
使用海龟编辑器,编写以下的代码:
import turtle
turtle.shape('turtle')
turtle.forward(100)
turtle.left(90)
turtle.forward(100)
turtle.left(90)
turtle.forward(100)
turtle.left(90)
turtle.forward(100)
turtle.left(90)
turtle.done()
是的,你看到了,这段代码就是让小海龟前进、左转90度,重复执行了四次,画出了一个边长为100的正方形。你肯定会说——为什么不用“重复执行四次”呢?那不是更简单?别急,Python中的重复执行指令我们不是还没学到嘛。
再来,让小海龟画几个圆形:
import turtle
turtle.shape('turtle')
turtle.forward(100)
turtle.left(144)
turtle.forward(100)
turtle.left(144)
turtle.forward(100)
turtle.left(144)
turtle.forward(100)
turtle.left(144)
turtle.forward(100)
turtle.left(144)
turtle.done()
如果你理解了小海龟的指令,而且回忆起以前做过的Scratch画图程序,可能不用运行就知道,我们这段程序就是用来画五角星的嘛。
上面是使用前进和左转,现在我们用画圆(circle)指令来作图:
import turtle
turtle.pensize(12)
#第一个圆圈
turtle.penup()
turtle.goto(-250,0)
turtle.pendown()
turtle.pencolor('blue')
turtle.circle(100)
#第二个圆圈
turtle.penup()
turtle.goto(0,0)
turtle.pendown()
turtle.pencolor('black')
turtle.circle(100)
#第三个圆圈
turtle.penup()
turtle.goto(250,0)
turtle.pendown()
turtle.pencolor('red')
turtle.circle(100)
#第四个圆圈
turtle.penup()
turtle.goto(-125,-100)
turtle.pendown()
turtle.pencolor('yellow')
turtle.circle(100)
#第五个圆圈
turtle.penup()
turtle.goto(125,-100)
turtle.pendown()
turtle.pencolor('green')
turtle.circle(100)
turtle.done()
上面这段代码有点长,不过有五段的作用是基本一样的,就是先抬笔,移动的特定的坐标位置,然后落笔,设置画笔的颜色(括号中设置的以单引号包括起来的是颜色名称,相信这些单词你应该学过,从上到下分别是蓝色、黑色、红色、黄色和绿色),接着执行circle指令画一个半径为100的圆。这五个颜色不同的圆组合在一起,就变成了大家熟悉的奥运五环。
在程序中有几行以“#”开头的文字,它们不是指令,以#开头代表这一行是注释,是为了方便我们理解程序的含义写给自己备忘的。以后我们会讲解程序注释的方法,这里先了解即可。
在程序的开头,我们用pensize()设置了画笔粗细,对于用惯了Scratch画图的你来说,这一切是不是都似曾相识?只要灵活运用上面提到的这些指令,再结合你在Scratch编程训练中学习到的内容,你已经可以画许多图形了。
四、作业
使用今天学习到的turtle扩展库,画出一个彩色的正八边形(颜色按你自己喜欢的来)。