零基础学编程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 条评论
登录 后参与评论

相关文章

来自专栏我和未来有约会

Silverlight第三方控件专题

这里我收集整理了目前网上silverlight第三方控件的专题,若果有所遗漏请告知我一下。 名称 简介 截图 telerik 商 RadC...

4025
来自专栏落花落雨不落叶

canvas画简单电路图

62111
来自专栏跟着阿笨一起玩NET

c#实现打印功能

2782
来自专栏pangguoming

Spring Boot集成JasperReports生成PDF文档

由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲...

1.2K7
来自专栏闻道于事

js登录滑动验证,不滑动无法登陆

js的判断这里是根据滑块的位置进行判断,应该是用一个flag判断 <%@ page language="java" contentType="text/html...

6848
来自专栏芋道源码1024

熔断器 Hystrix 源码解析 —— 断路器 HystrixCircuitBreaker

本文主要基于 Hystrix 1.5.X 版本 1. 概述 2. HystrixCircuitBreaker 3. HystrixCircuitBreaker....

5327
来自专栏张善友的专栏

Mix 10 上的asp.net mvc 2的相关Session

Beyond File | New Company: From Cheesy Sample to Social Platform Scott Hansel...

2577
来自专栏大内老A

The .NET of Tomorrow

Ed Charbeneau(http://developer.telerik.com/featured/the-net-of-tomorrow/) Exciti...

31810
来自专栏hbbliyong

WPF Trigger for IsSelected in a DataTemplate for ListBox items

<DataTemplate DataType="{x:Type vm:HeaderSlugViewModel}"> <vw:HeaderSlug...

4064
来自专栏一个会写诗的程序员的博客

Spring Reactor 项目核心库Reactor Core

Non-Blocking Reactive Streams Foundation for the JVM both implementing a Reactiv...

2182

扫码关注云+社区