以Turtle入手的程序设计教学案例设计与实践

2021-09-09 08:20林卫中
现代计算机 2021年19期
关键词:海龟程序设计绘制

林卫中

(景德镇陶瓷大学信息工程学院,景德镇 333000)

0 引言

结构化的计算机程序设计中最重要的思想是“自顶向下,逐步求精”,并且在这一过程中仅使用顺序、选择和循环三种程序结构,并使用模块化的函数编程解决问题。分析往年学生在学习程序设计入门课程如《C语言程序设计》或《Java语言程序设计》中的困惑,我们发现学生开始学习时重心往往放到繁琐的语法学习上,而对程序结构和函数的掌握比较困难。

Python语言是目前最接近自然语言的编程语言,它具有简洁、高效和生态三个明显的优势[1]。它提供了丰富的图形计算生态,借助Turtle库可以简单方便地实现图形绘制,在Python教学中引入图形绘制,可以达到增强学生学习兴趣,培养学生现代计算思维的目的[2]。

1 目前计算机程序设计教学中存在的问题

目前,C语言程序设计和Java语言程序设计是绝大多数学校首选的计算机程序设计入门语言。对于初学程序设计的学生而言,C或Java语言入门比较困难,主要原因如下。

(1)入门语法繁琐

C(或Java)语言是强类型语言,基础语法要求复杂且严格,对变量的声明和使用非常严格。另外它们的计算生态不如Python丰富,如输入和输出的处理,C语言中输出函数printf细节太繁琐,而Java中对输入和输出有太多的类之间的封装也不是初学者容易理解的。这样导致学生在初接触程序设计时陷入繁琐细节的学习,无暇深入对程序结构的理解和学习。

(2)教学案例呆板

在C(或Java)程序设计语言课程中大多使用求解数学类问题作为例题。很多学生对程序设计的兴趣是来自于一些对程序的神秘和好玩,他们希望经过学习后能解决一些实际的问题,如绘制玫瑰花、网络爬虫等。教材中枯噪的问题求解使大部分学生迅速地丧失了学习兴趣,使得他们对程序设计产生了理想和现实差距的困惑[2]。

2 Python教学改革实践发展现状

Python语言目前被广泛使用,是面向对象的高级通用脚本编程语言,具有语法简单,明晰易懂的特点。近年来在各高校开始逐渐普及开始。2017年北京理工大学举办了首届全国高校Python语言与计算生态教学研讨会,掀起了Python的教学和教研热潮。

随着以计算思维为切入点的“大学计算机课程改革项目”的开展,一些高校老师在计算思维视域尝试引入Python程序设计课程。黄静为非计算机专业学生开始了Python的计算机基础课程,有助于提升非计算机专业学生应用计算机解决问题的能力与水平[3]。王亚萍开展了基于SPOC的翻转课堂的Python程序设计课程,并构建了基于过程的动态综合评价方式,为高校计算机程序设计教学提供了一种可参考的实践摸索[4]。

随着Python教学实践的开展,一些各具特色的教学案例和课程教学改革也纷呈出现。嵩天设计了“海龟绘图作品”和“人物出场统计”教学实践方案,并展示了在北京理工大学开展教学实践的部分学生作品[5]。张思杨引入项目案例,以成果导向为指导的教学模式侧重培养学生学习兴趣、解决问题能力和计算思维[6]。

以上教学改革或教学实践的开展为我们提供了蓝本,很有借鉴意义。

3 基于Turtle的程序设计教学案例

Turtle库是Python语言最基础的图形绘制函数库,它具有如下优点:首先,它的图形绘制概念直观易懂,模拟一只海龟爬行,将其爬行轨迹动态生成图形进行输出;其次,语法简单,只要导入Turtle库后,然后使用Turtle库提供的函数表示海龟的运动轨迹即可;第三,它需要记忆的基本函数非常少且容易记住,常用的只需记住约10个的函数即可(见表1),而且函数的名字与海龟动作名称的自然语言一致,易于记忆。

表1 Turtle库常用函数

在绘图时,只要计算好海龟的运动轨迹,无需繁琐的语法,按运动轨迹调用对应的函数即可。

3.1 教学案例1:图形绘制入门

我们设计一个简单的教学案例:绘制一个四边形,按简单的计算思维,那就是绘制出4条边,代码如下:

import turtle as t

t.setup(400,400,20,20)

t.forward(25)

t.right(90)

t.forward(25)

t.right(90)

t.forward(25)

t.right(90)

t.forward(25)

t.right(90)

在本例中设置图形窗口位于屏幕左上角(20,20),宽和高均为400像素,海龟先往前爬25个像素,然后顺时针旋转900,再前爬25个像素,如此重复4次直到海龟回到原来位置。图形绘制的效果如图1。

图1 绘制4边形

3.2 教学案例2:程序结构教学

程序设计结构是计算机程序设计语言教学中的重点和难点内容,结构化的程序设计仅使用3种基本结构:顺序结构、选择结构和循环结构。在Python图形化的程序设计结构教学中,使用Turtle库就可以跳过繁琐的基础语法知识,引导学生深入理解程序的三种结构。在解决具体图形绘制问题时,学生只要计算出海龟的运动轨迹,再通过调用goto()、penup()、circle()和pendown()等函数就可以实现图形的绘制,进一步,通过设置turtle的填充属性如begin_fill()、pencolor()、end_fill()等函数就可以为绘制的图形填充颜色。通过这些函数可以使绘制的图形色泽鲜艳、生动,满足学生的兴趣,让学生直观理解三种程序结构[2]。

以案例1为例,分析代码发现:第3行和第4行重复出现4次,在程序设计中,这样重复的工作可以使用循环结构实现,改编后的代码如下:

t.setup(400,400,20,20)

for i in range(4):

t.forward(25)

t.right(90)

代码中的range(4)表示计数4次。通过这个案例可以简单地把程序结构从顺序结构过渡到循环结构。

3.3 教学案例3:函数教学

绘制一个如图2的简笔画的鱼。

图2 简笔画鱼

代码如下所示:

import turtle as t

t.setup(600,500,10,10)

t.fillcolor("yellow")

t.begin_fill()

#画鱼身

t.goto(200,200)

t.goto(200,-200)

t.home()

t.up()

t.goto(200,0)

t.down()

#画鱼尾

t.goto(250,50)

t.goto(250,-50)

t.goto(200,0)

t.up()

t.goto(50,-10)

t.down()

#画鱼眼

t.circle(10)

t.end_fill()

t.done()

通过观察结果图和分析代码发现,鱼身和鱼尾都是三角形,再比较对应的代码8-14行和17-23行,进一步发现海龟的动作是一样的,仅是一些具体的值不同,那么我们可以把一些相似的动作设计成一个函数模块,把动作不同的值设计成函数的参数,所示的代码可以改编为函数实现方式。

import turtle as t

def drawTriAngle(ax, ay, bx, by, px, py):

t.goto(ax,ay)

t.goto(ax,-ay)

t.goto(bx,by)

t.up()

t.goto(px,py)

t.down()

t.setup(600,500,10,10)

t.fillcolor("yellow")

t.begin_fill()

#画鱼身

drawTriAngle(200,200,0,0,200,0)

#画鱼尾

drawTriAngle(250,50,200,0,50,-10)

#画鱼眼

t.circle(10)

t.end_fill()

t.done()

通过本案例的教学,让学生感受到模块化的过程,理解函数的作用,整个程序设计过程没有繁琐的语法规则,重点在问题解的本身。

3.4 其他综合设计案例

为提高学生兴趣,并进行爱国主义教育,我们还设计了绘制国旗、机器猫、给老师献花等案例。案例效果图见图5。这些教学案例通过数学计算得到海龟的运行轨迹,然后调用turtle库函数实施绘制,语法简单,案例生动活泼,贴近生活,极大地调动了学生的积极性,激发了学生的兴趣,让学生认识到编程是件很好玩的事。特别是在绘制国旗的教学过程中穿插介绍巴西里约热内卢奥运会上悬挂的中国国旗出现每个小五角星水平对着大星的严重错误。通过这个故事告诉学生在计算位置坐标时,小五角星各有一个尖正对大星中心点,象征围绕中国共产党领导下的人民大团结,结合教学进行爱国主义教育,让爱国主义教育不再空洞,而是落实在计算只中,效果反响良好。

图3 综合设计教学案例

4 结语

基于Turtle库简单的图形绘制函数,我们在计算机程序设计教学中,一改以往纯粹地解决数学问题作为编程例题和习题的做法,把图形绘制引入到程序设计教学中,通过教学实践设计了众多的教学案例,这些教学案例不要求学生掌握负责的语言语法,把注意力放回问题本身。实践表明,通过生动鲜明、贴合生活实际的教学案例可以极大激发学生学习编程的兴趣,建立学习的信心,能更好地掌握计算机程序设计中的程序结构设计和函数的概念,程序设计能力有很大提升。

猜你喜欢
海龟程序设计绘制
基于OBE的Java程序设计个性化教学研究
项目化教学在Python程序设计课程中的应用
C++程序设计课程教学改革研究
Painting ski maps 绘制滑雪地图
绘制童话
医学专业“Python程序设计”课程教学改革总结与思考
绘制世界地图
可怕:一块塑料便可“杀死”一只海龟
海龟泡饭汤
海龟