零基础学编程014:小海龟做画

在《零基础学编程012:画出复利曲线图》这篇文章中,我们使用了强大的matplotlib和numpy模块,可以用几行代码画出复杂的图形来。但对于初学者来说,里面的语句理解起来还是非常有难度。既然是零基础,可以看看很久以前孩子们是如何开始学编程的。

1967年,Daniel G. Bobrow, Wally Feurzeig, Seymour PapertCynthia Solomon设计了LOGO编程语言,用一种直观的方式教孩子们学习编程。尽管该语言也可以解决复杂问题,但给大家留下最深刻印象的是它里面的海龟绘图系统(Turtle Graphics)。

通过向海龟(turtle)发送命令,用户可以直观地学习程序的运行过程,因此它很适合于儿童学习,当然也可以用于几何教学。我以前就在一些学习机上运行过LOGO环境,还带着自己的孩子在上面做画,估计她现在早就忘了这段故事了。

强大的Python语言肯定也不会遗忘小海龟,在Python环境中已经内置好了turtle模块,你只需要在Python IDLE中输入2行语句,就可以让小海龟就位。

import turtle
turtle.reset()

这时屏幕上会弹出一个图形窗口,那个朝向右方的小箭头就代表小海龟。

现在试着给小海龟发送命令,forward(100)表示向前方走100步,计算机上1步就是1个像素,left(90)表示向左转90度。

咱们来个郭冬临在小品《问路》中的“左转左转左转左转,好像是一个圈呦”:

turtle.forward(100)
turtle.left(90)
turtle.forward(100)
turtle.left(90)
turtle.forward(100)
turtle.left(90)
turtle.forward(100)
turtle.left(90)

当然画出来的是一个正方形。

我们已经在《零基础学编程007:FOR循环》里学过了循环语句,可以把代码简化为重复4次的前进和左转,效果一样:

for i in range(4) :
    turtle.forward(100)
    turtle.left(90)

这些指令虽然简单,但你可别小瞧它,一段计算机程序也就是顺序条件循环这三种程序结构。如果再运用上递归算法,能够产生许多奇妙的图案。试着复制并粘贴这段代码到Python IDLE中,看看它能画出什么图形?

from turtle import *

def f(length, depth):
   if depth == 0:
     forward(length)
   else:
     f(length/3, depth-1)
     right(60)
     f(length/3, depth-1)
     left(120)
     f(length/3, depth-1)
     right(60)
     f(length/3, depth-1)

f(500, 4)

在Python3中,turtle能够执行许多命令,点击“阅读原文”可以看到这些命令的帮助文档。

--- END ---

原文发布于微信公众号 - 申龙斌的程序人生(slbGTD)

原文发表时间:2017-01-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏腾讯数据中心

你必须认识的数据中心安全标识

行话说“年头出事白干一年,年尾出事一年白干”。临近年关,数据中心“安全”也变得热门了起来。数据中心的人身、物理及信息安全有千头万绪。今天,我们就从数据中心标识系...

4145
来自专栏数据小魔方

think-cell chart 系列1——堆积柱形图!

今天正式开始跟大家分享之前介绍过的图表插件——think-cell chart 。 要讲的第一个图表类型是其自带图表库中的第一个图表——堆积柱形图。 在正式开始...

3905
来自专栏社区的朋友们

【小程序码设计篇】菊花绽放

2017 年四月,微信正式推出了小程序码。小程序码设计深度解析,为何长得像菊花,进行二次美化应该注意什么,本文为你揭晓!

4.9K1
来自专栏Android群英传

不怕搞事,自定义View云扩散效果

612
来自专栏拂晓风起

cocos2d-js 和 createjs 性能对比(HTML5)

1264
来自专栏Data Analysis & Viz

百年百图の中国(1900-1999):另类python爬虫和PIL拼图

标题有点长,也有点怪。前半部分文艺向,后半部分python技术向。目的就是用PIL库得到100张图的拼图(成果图见文末)。

542
来自专栏数据小魔方

仪表盘图表

很抱歉最近几天骨折忙考试,连着四天都没有自己写教程了,不过为了不辜负大家对小魔方的期待,我也是精挑细选从哪些活跃的PPT达人那里转载了几篇关于PPT图文排版的帖...

3555
来自专栏tkokof 的技术,小趣及杂念

随便聊聊水面效果的2D实现(一)

  一直想随便写写自己关于水面效果2D实现的一些了解,可惜各种原因一直拖沓,幸而近来有些事情终算告一段落,自己也有了一些闲暇时间,于是便有了这篇东西 :)

1034
来自专栏牛客网

阿里前端一面面经

1520
来自专栏邵靖的专栏

使用 plotly 绘制数据图表

不少小伙伴在开发过程中都有对模块进行压测的经历,压测结束后大家往往喜欢使用Excel处理压测数据并绘制数据可视化视图,但这样不能很方便的使用web页面进行数据展...

8746

扫码关注云+社区