python龟库_Python标准库程序框架——turtle海龟绘图

Python标准库程序框架——turtle海龟绘图

​ 我想,科普最好的对象是小朋友,那么就写一下被移植到Python标准库里的turtle库吧。以下代码基于Python 3.8.1。

概述

​ 海龟绘图,最初来自于 Wally Feurzeig, Seymour Papert 和 Cynthia Solomon 于 1967 年所专门为引导儿童学习编程创造的 Logo 编程语言。turtle库的实现过程很形象,犹如一只海龟在画布上画画。海龟绘图很适合用来培养小朋友对编程的学习兴趣。

​ 试想象一下,在一块画布上,起始位置在x-y平面的(0,0)点,执行```import turtle``来召唤一只拿着画笔的海龟(也就是一个点),再利用turtle库里一系列的指令(方法)来指挥这只海龟来爬。最后通过组合这些指令,海龟爬行的轨迹将可以轻松地绘制出精美的形状和图案。并且通过对应函数,能按我们的要求把海龟的轨迹在显示设备上输出显示。

​ 目前的turtle模块是基于Python标准发行版2.5重新编写和扩展,并与原模块100%兼容。因此能以交互方式使用模块的所有命令、类和方法。

​ turtle模块提供面向对象和面向过程两种形式的海龟绘图基本组件。具体如下:

面向对象:

TurtleScreen 类定义图形窗口作为绘图海龟的运动场。它的构造器需要一个 tkinter.Canvas 或 ScrolledCanvas 作为参数。应在 turtle 作为某个程序的一部分的时候使用。

Screen() 函数返回一个 TurtleScreen 子类的单例对象。此函数应在 turtle 作为独立绘图工具时使用。作为一个单例对象,其所属的类是不可被继承的。

TurtleScreen/Screen的所有方法还存在对应的函数,即作为面向过程的接口组成部分。

RawTurtle 类定义海龟对象在TurtleScreen上绘图。它的构造器需要一个 Canvas, ScrolledCanvas 或 TurtleScreen作为参数,以指定 RawTurtle对象在哪里绘图。

从 RawTurtle派生出子类Turtle,该类对象在Screen实例上绘图,若实例不存在则会自动创建。

RawTurtle/Turtle 的所有方法也存在对应的函数,即作为面向过程的接口组成部分

面向过程:

​ 过程式接口提供与Screen 和Turtle类的方法相对应的函数。函数名与对应的方法名相同。当Screen类的方法对应函数被调用时会自动创建一个Screen 对象。当Turtle类的方法对应函数被调用时会自动创建一个 (匿名的)Turtle 对象。

​ 当需要屏幕上有多个海龟的时候,就必须使用面向对象的接口。

可用的turtle和Screen方法

​ 如前文所说,我们通过import turtle召唤了一只拿着画笔的海龟,海龟的的动作以及画笔都是通过方法来控制的。同时,作为一只被召唤出来的二维生物,我们作为比他高维的生物,自然有很多降维操纵甚至打击的方法。从某种角度上来说,我们对这些turtle有近乎神迹般的操纵和控制。 然而并不是。具体方法如下。

RawTurtle/Turtle方法和对应函数

以下都是使用Turtle类的实例,命名为turtle。

海龟动作

​ 我们能控制海龟的前进后退,左转右转,爬行速度,甚至能让海龟像赛亚人或者哈利波特里的巫师一样学会幻影移行,同时能随时获知海龟的位置信息。

移动和绘制

forward(distance) :前进distance距离

>>> turtle.position()

(0.00,0.00)

>>> turtle.forward(distance)

>>> turtle.position()

(distance,0.00)

>>> turtle.forward(distance)

>>> turtle.position()

(distance+distance,0.00)

backward(distance) :后退distance距离

>>> turtle.position()

(0.00,0.00)

>>> turtle.backward(distance)

>>> turtle.position()

(-distance,0.00)

right(angle) :右转angle个单位

>>> turtle.heading()

22.0

>>> turtle.right(angle)

>>> turtle.heading()

22.0-angle+360.0

left(angle):左转angle个单位

>>> turtle.heading()

22.0

>>> turtle.left(angle)

>>> turtle.heading()

22.0+angle

goto(x,y=None) | setposition(x,y=None) :前往/定位一个绝对坐标

setx(x) 设置x坐标

sety(y) 设置y坐标

setheading(to_angle) 设置朝向

import turtle

from turtle import *

color('red', 'yellow')

turtle.setheading(90)

turtle.heading()

done()

home() 返回原点

circle(radius, extent=None, steps=None) 画圆

import turtle

from turtle import *

color('red', 'yellow')

turtle.home()

turtle.position()

turtle.heading()

turtle.circle(50)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值