零基础学编程014:小海龟做画
在《零基础学编程012:画出复利曲线图》这篇文章中,我们使用了强大的matplotlib和numpy模块,可以用几行代码画出复杂的图形来。但对于初学者来说,里面的语句理解起来还是非常有难度。既然是零基础,可以看看很久以前孩子们是如何开始学编程的。
1967年,Daniel G. Bobrow, Wally Feurzeig, Seymour Papert 和 Cynthia 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 ---
- 基于 vue2 构建和后台真实交互的 管理系统
- ASP.NET MVC的Model元数据与Model模板:模板的获取与执行策略
- python3.6抓取100知乎用户头像详解(四)
- 从运营商小广告到HTTPS
- .NET Core采用的全新配置系统[5]: 聊聊默认支持的各种配置源[内存变量,环境变量和命令行参数]
- 区块链:为什么它不仅仅是比特币?
- Java Mail(二):JavaMail介绍及发送一封简单邮件
- ASP.NET MVC Controller激活系统详解:总体设计
- .NET Core采用的全新配置系统[7]: 将配置保存在数据库中
- Selenium3+Python3环境部署
- Java Mail(三):Session、Message详解
- .NET Core采用的全新配置系统[8]: 如何实现配置与源文件的同步
- 四个问答让你秒懂区块链原理及应用
- .NET Core采用的全新配置系统[9]: 为什么针对XML的支持不够好?如何改进?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- R语言随机森林模型中具有相关特征的变量重要性
- WPF 使用 Direct Manipulation 的方法
- R语言分析负利率下金融市场:负利率和年金价值的变化
- python字典-增、删、改
- C# dotnet 使用判断文件夹存在的方法判断一个文件路径会怎样
- 怎样给wordpress网站模板,添加最新文章、随机文章、热评文章?
- [医疗信息化][DICOM教程]1.使用Java的DICOM基础-理解DICOM文件-DICOM Basics using Java - Making Sense of the DICOM File
- python自动播放网课
- Istio实战——流量管理
- WordPress移除head头部js、css、feed等多余加载项
- python控制鼠标键盘,解放你的双手~
- 用腾讯云批量计算(batch-compute)调度GPU分布式机器学习
- R语言模拟保险模型中分类器的ROC曲线不良表现
- Linux xargs grep zgrep命令
- r语言空间可视化绘制道路交通安全事故地图