老齐教室

青少年编程:用Python探究数学(1)

说明:本系列文章是为中小学生学习Python语言而编辑,在阅读本文之前,请已经做好如下准备:

  • 在本地计算已经配置Python开发环境
  • 能够开启Python自带的IDLE编辑器

对以上两点,若尚未达到,请自行参考网上有关资料。

画多边形

1966年,麻省理工的数学家Seymour Aubrey Papert和Wally Feurzeig设计了一种名为Logo的编程语言,其初衷是为了向儿童教授计算机编程技能,Logo一词源自希腊语逻各斯(logos)。在Logo语言中,有一只小海龟(turtle),通过向它发送命令,可以实现各种绘图操作。Python继承了Logo语言的这个特点,在它里面有一个名为turtle的内置模块,同样能够实现各种绘图操作。

下面就学习一下,如果用这只小海龟画一个多边形。

引入模块

首先,打开Python自带的IDLE编辑器,创建一个名为myturtle.py的文件。

要使用Python中的“海龟”,必须先要引入它。在刚才创建的文件中,写下第一行代码:

1
from turtle import *

这一行代码意味着从turtle模块汇总引入所有的函数。

  • from是一个关键词,表示从哪个模块引入函数
  • turtle是用来绘图的模块名称
  • import引入模块的关键词
  • *表示所有的东西,即turtle模块中的所有内容都被引入到当前文件中

写完上面的代码,就保存文件。

注意:不要把文件命名为turtle.py,这个名称在Python中已经被模块turtle所在的文件占用了。你应该使用其他名称,比如myturtle.pyturtle2.py等等。

移动海龟

引入模块之后,就为后面的作图奠定了基础。想一想如何用铅笔作图?一定少不了的就是要让铅笔在纸面上移动起来。与此类似,我们也要先让海龟移动起来,它移动过程中的轨迹,就形成了图形。

此处,我们使用一个名为forward()的函数,实现位置的移动。接着上面一行,在文件中写第二行代码:

1
forward(100)

forward()函数里面的参数100,表示要移动的距离。还是先看看效果再说。

保存文件,按F5键,会看到下图结果:

图中间的带有箭头的线段,就是刚才画出来的。从这我们可以看到,海龟的初始位置,是在屏幕的中间,按照forward(100)这个质量,它要向前(向右)移动100个像素那么远的距离。注意,默认我们看到的是箭头——没有海龟出现。并且,默认方向是水平向右。

如果你非要显示一个海龟,也不是不可以,再增加一行代码。下面显示文件myturtle.py的所有代码:

1
2
3
4
from turtle import *

forward(100)
shape("turtle")

注意:写代码的时候,大小写不要弄错,拼写不要弄错,引号不要弄错,都要在英文半角状态下。

再保存文件,并按下F5键,会看到小海龟和它走过的轨迹了。

改变方向

真实的海龟,不撞南墙不回头,是吗?不是,它会改变自己的行进方向的。在turtle模块中,也提供了改变方向的函数right()left(),从名称上就能猜测到,分别实现的是向右转和向左转。

继续编辑myturtle.py文件,增加两行:

1
2
3
4
5
6
from turtle import *

forward(100)
shape("turtle")
right(45) # new
forward(150) # new

跟前面的代码比较,增加了两行,并且在新增的两行后面都有# new,这个内容叫做注释,它是给人看的,就是告诉阅读这部分代码的人,这两行是新增的。在Python中,注释的的内容前面必须写上#,这样在执行这段程序的时候,计算机就把#及其以后的内容忽略了(直到本行结束)。

在新增的两行中,right(45)表示向右转45°,这里的“右”是相对于海龟前进的方向而言;forward(150)就是向前走150个像素,注意此时的方向。联合起来,就实现了向右转45°并走150个像素。

执行这个程序(按F5键),得到下图结果:

到目前为止,小海龟从屏幕的中间,水平向右(默认的向前)移动100个像素,然后向右转45°,再前进150个像素。

画正方形

利用forward()right()函数,能够画正方形,可以自己试试。下面是参考代码。

1
2
3
4
5
6
7
8
9
10
from turtle import *

forward(100)
shape("turtle")
right(90)
forward(100)
right(90)
forward(100)
right(90)
forward(100)

当然,利用这两个函数,还能画其他图像。

前面提到了另外一个函数left(),与right()用法一样,只不过是向左转了,你也可以尝试一下。

上面代码画的是正方形,也就是正四边形,如果画正八边形,是不是就要把right()forward()两个函数重复更多次了呢?有没有更好的实现方法呢?请看下回分解。


专注于软件和AI的公众号

老齐教室

使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏

关注微信公众号,读文章、听课程,提升技能