热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Pythonturtle的多学科创意编程!

Python语言中内置的海龟作图turtle模块设计巧妙,作图模型简单强大,能够让程序设计初学者很快编写出趣味生动的作图程序,极大提高编程

Python 语言中内置的海龟作图turtle 模块设计巧妙,作图模型简单强大,能够让程序设计初学者很快编写出趣味生动的作图程序,极大提高编程学习的兴趣和积极性,在练习过程中培养和提高计算思维。除了绘制图形之外,Python turtle 模块还具有基本的交互功能,加上学习门槛低,又是Python 语言内置的标准模块,所以非常适合作为创意编程的学习和开发平台。本文以Python turtle 模块为核心,展示和分析交互游戏、数学对象可视化等学科领域的创意编程实例,并介绍turtle 模块的深入编程,以供创意编程的教学参考,也可用于高中Python 程序设计课程的教学案例。

 

Python资源共享群:484031800

本作品是一个通过鼠标控制的交互游戏。程序运行后,在turtle窗口中会有随机数量和位置的红色苹果从顶端向下掉落,掉落速度各不相同。用户需要通过鼠标拖动窗口中间的三角形状“托篮”接住每一个苹果。托篮可以在窗口中随意移动,如果接住苹果,则加10分,分数在窗口左下角实时更新显示,但如果未能接住苹果使其掉出窗口下沿的话,则惩罚性地减100分。由于苹果产生的位置和速度均为随机,数量不定,惩罚性减分幅度大,游戏还是有相当难度的,想一直保持正分不太容易。最后点击关闭窗口即可退出游戏。游戏运行效果如图所示。

 

 

 

 

 

 

turtle功能

本作品涉及到的turtle模块功能主要有5个。

第1个是海龟绘图加速功能,通过在程序前部加tracer方法调用禁止动画显示。

1      import turtle, random

2               

3      turtle.tracer(0)

并在每帧绘制结束后调用update方法进行屏幕刷新,让绘制的图形一次性显示在窗口里。

42       # 刷新屏幕

43       turtle.update()

第2个是turtle模块的鼠标交互功能,如程序中的第17行。

12    # 接苹果的篮子

13    turtle.addshape('basket', ((-100, 0), (100, 0), (0, -25)))

14    basket = model.clone()

15    basket.shape('basket')

16    basket.setheading(90)

17    basket.ondrag(basket.goto) # 把goto函数绑定到鼠标拖动事件上

18    basket.showturtle()

将海龟basket的拖动事件绑定到basket的goto函数,这样,当用户用鼠标点击这个海龟并进行拖动的时候,会触发drag事件,实现调用basket.goto函数,并将事件发生时海龟的坐标作为参数传递给basket.goto函数,从而实现鼠标拖动到哪里,海龟basket就跟到哪里的交互效果。海龟的鼠标交互事件还有点击事件onclick、释放事件onrelease,都可以绑定处理函数,从而实现点击、释放鼠标各个按钮的交互。

第3个是海龟克隆功能,如程序中的第14行,海龟model的clone方法,可以将model对象复制1个,赋值给basket,克隆会产生新的海龟对象,并且保留原海龟对象的所有属性值。利用克隆功能,能够很方便地复制出相互独立而又具有相同初始属性的多个海龟,这些海龟后续修改属性并不会相互影响。

第4个是海龟形状设定功能,如程序中的第13、15行,由于鼠标交互需要整体拖动一个图形,我们就可以将一个海龟的形状设置为这个图形,实现图形的动画和接受鼠标拖动事件。第13行在程序中用addshape函数添加注册1个名字为“basket”的形状,从代码可以看出,这是1个以海龟坐标为中心的倒三角形。第15行用shape函数将海龟basket设置成名称为“basket”的形状。

我们也可以用shape函数将海龟的形状改为turtle模块内置的形状,如箭头"arrow"、海龟"turtle"、圆"circle"、方形"square"、三角形"triangle"和经典形状"classic"。

第5个是海龟的“盖戳”复印功能,如程序中的第43行,设定好红色苹果形状的海龟mould作为印模,可以在海龟当前位置上留下自身的形状。即便移走海龟,这个形状仍然保持在原地。

40           # 苹果下落,并用印模画出苹果

41           apple[1] -= apple[2]

42           mould.goto(apple[0], apple[1])

43           mould.stamp()

stamp函数将返回一个stampid,如果需要清除这个形状,则可以调用clearstamp函数清除指定stampid的形状,或者调用clearstamps函数清除所有形状。

 

数学对象可视化:玫瑰曲线

本作品通过玫瑰曲线的数学定义,使用turtle库绘制出来。通过改变代码内参数可绘制不同的玫瑰曲线。程序运行结果如下图。

 

 

 

 

 

 

turtle功能

本作品涉及的turtle功能有2个。

第1个是通过pencolor与pensize函数设置画笔颜色与大小,此外还有fillcolor设置填充色,color同时设置画笔色与填充色,shapesize设置画笔形状大小等函数。例如程序10—11行。

10    rose.pencolor('red')

11    rose.pensize(7)

第2个是设置动画移动速度,如第12行设置其为最快。

12    rose.speed('fastest')

物理仿真:抛物和碰撞

本作品通过欧拉法逐帧模拟了一个小球受到重力与空气阻尼(正比于速度)作用,进行斜抛运动,并在墙面与地面发生弹性碰撞的现象。通过turtle库可视化了墙面与地面的位置,以及小球的运动路线,并且保留绘制了小球从发射到减速停止的运动轨迹。程序运行效果如下图。

 

 

 

 

 

 

turtle功能

本作品涉及到的turtle功能主要有3个。

第1个是绘制加速和手动更新画面。

3      turtle.tracer(0)

42       turtle.update()

第2个是绘制路径的基本功能。

14    # 绘制地面和墙

15    ball.pencolor('blue')

16    ball.penup()

17    ball.goto(-500, GROUND_Y)

18    ball.pendown()

19    ball.goto(WALL_X, GROUND_Y)

20    ball.goto(WALL_X, 500)

第3个是更改形状与形状大小。

12    ball = turtle.Turtle('circle')

13    ball.shapesize(R / 10)

 

地球空间信息可视化:地图绘制

本作品结合了shapefile库(通过pip install pyshp安装)的功能,读取ESRI Shapefile(shp)地图矢量图文件,并使用turtle库将其绘制出来。程序运行效果如下图。

 

 

 

 

 

 

turtle功能

本作品涉及的turtle功能有3个。

第1个是海龟绘图加速功能。

1      import turtle, random

2   import shapefile # 需要安装shapefile模块,读取

3      

4      turtle.tracer(0) # 海龟加速,无动画

47    turtle.update()

第2个是turtle画布的设置,包括第17行设置窗口宽高,与第21行设置坐标系。

17    turtle.setup(w + 20, h + 30)

18    

19    # 将海龟坐标系设置为与地图坐标相同

20    #turtle.setworldcoordinates(layer.bbox[0], layer.bbox[1], layer.bbox[2], layer.bbox[3])

21    turtle.setworldcoordinates(*layer.bbox)

第3个是多边形的绘制与上色,turtle中要绘制复杂边界的区域,并对其内部进行上色时,使用begin_fill与end_fill函数标记区域边界的起止,在落笔前调用begin_fill()并在结束绘制后调用end_fill()就会根据画笔当前通过color或fillcolor函数设置的填充颜色对其间经过的区域进行上色。如代码中32—43行。

32       for xy in f.shape.points:

33           map_pen.goto(xy)

34           if new_polygon:

35               start = xy

36               map_pen.pendown()

37      map_pen.fillcolor(random.choice(colors))

38               map_pen.begin_fill()

39               new_polygon = False

40           elif xy == start:

41               map_pen.end_fill()

42               map_pen.penup()

43               new_polygon = True

 

生物学仿真:标记重捕法

标记重捕法是生物学上用于研究一个地区种群数量的方法,通过捕捉少量的个体进行标记并放回,一段时间后重新捕捉,并通过重捕数、重捕的标记数与标记总数估算出整个种群的数量。本作品通过turtle可视化了标记重捕法中标记、放回、重捕的动态过程,并且即时地进行数量估算,与实际数量进行对比,将估算公式与结果以文字形式输出。程序运行截图如下图。

 

 

 

 

 

 

turtle功能

本作品涉及到的turtle模块功能主要有4个。

首先是绘图加速功能,通过turtle.tracer(0)关闭动画效果,辅以手动的turtle.update()更新画面。

4      turtle.tracer(0)

75       turtle.update()

其次是基础的坐标移动与画线功能。

27    for x in SIZEC, SIZEP:

28       tt.goto(-x, x)

29       tt.pendown()

30       tt.goto(-x, -x)

31       tt.goto(x, -x)

32       tt.goto(x, x)

33       tt.goto(-x, x)

34       tt.penup()

第3个是dot画点的功能。

59           # 绘制

60           t_dot.goto(pos)

61           t_dot.dot()

最后是write绘制文字的功能。

71       t_text.clear()

72       t_text.write(

73           'Actual: %d\nEstimated: %s = %s' % (N, n_calc, formula), font=FONT)

Python语言是一种语法简洁、功能强大而又对初学者友好的通用型编程语言,在标准的Python语言发行版中,内置了入门快、表现力强的turtle模块,让初学者通过几行代码就能绘出精美的图形,再通过简单的逻辑即可进行键盘鼠标的交互。

Python语言及turtle模块的组合非常适合初学者进行创意编程的起点和创作工具,本文展示了艺术化的数字图形之外,在基础教育中各学科创意编程的实例,希望以此抛砖引玉,读者们可以创作出更多面向科学探索的创意编程作品。


推荐阅读
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 在本教程中,我们将看到如何使用FLASK制作第一个用于机器学习模型的RESTAPI。我们将从创建机器学习模型开始。然后,我们将看到使用Flask创建AP ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • EzPP 0.2发布,新增YAML布局渲染功能
    EzPP发布了0.2.1版本,新增了YAML布局渲染功能,可以将YAML文件渲染为图片,并且可以复用YAML作为模版,通过传递不同参数生成不同的图片。这个功能可以用于绘制Logo、封面或其他图片,让用户不需要安装或卸载Photoshop。文章还提供了一个入门例子,介绍了使用ezpp的基本渲染方法,以及如何使用canvas、text类元素、自定义字体等。 ... [详细]
  • Python使用Pillow包生成验证码图片的方法
    本文介绍了使用Python中的Pillow包生成验证码图片的方法。通过随机生成数字和符号,并添加干扰象素,生成一幅验证码图片。需要配置好Python环境,并安装Pillow库。代码实现包括导入Pillow包和随机模块,定义随机生成字母、数字和字体颜色的函数。 ... [详细]
  • 本文讨论了如何使用GStreamer来删除H264格式视频文件中的中间部分,而不需要进行重编码。作者提出了使用gst_element_seek(...)函数来实现这个目标的思路,并提到遇到了一个解决不了的BUG。文章还列举了8个解决方案,希望能够得到更好的思路。 ... [详细]
  • Python已成为全球最受欢迎的编程语言之一,然而Python程序的安全运行存在一定的风险。本文介绍了Python程序安全运行需要满足的三个条件,即系统路径上的每个条目都处于安全的位置、"主脚本"所在的目录始终位于系统路径中、若python命令使用-c和-m选项,调用程序的目录也必须是安全的。同时,文章还提出了一些预防措施,如避免将下载文件夹作为当前工作目录、使用pip所在路径而不是直接使用python命令等。对于初学Python的读者来说,这些内容将有所帮助。 ... [详细]
  • 花瓣|目标值_Compose 动画边学边做夏日彩虹
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Compose动画边学边做-夏日彩虹相关的知识,希望对你有一定的参考价值。引言Comp ... [详细]
  • 今天就跟大家聊聊有关怎么在Android应用中实现一个换肤功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根 ... [详细]
  • 本文介绍了Python对Excel文件的读取方法,包括模块的安装和使用。通过安装xlrd、xlwt、xlutils、pyExcelerator等模块,可以实现对Excel文件的读取和处理。具体的读取方法包括打开excel文件、抓取所有sheet的名称、定位到指定的表单等。本文提供了两种定位表单的方式,并给出了相应的代码示例。 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 2.对于随机访问get和set,ArrayList优于LinkedList,因为Ar ... [详细]
author-avatar
落单鸟人
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有