1. 基本功能介绍

在海龟作图中,我们可以编写指令让一个虚拟的(想象中的)海龟在屏幕上来回移动。这个海龟带着一只钢笔,我们可以让海龟无论移动到哪都使用这只钢笔来绘制线条。通过编写代码,以各种很酷的模式移动海龟,我们可以绘制出令人惊奇的图片。使用海龟作图,我们不仅能够只用几行代码就创建出令人印象深刻的视觉效果,而且还可以跟随海龟看看每行代码如何影响到它的移动。这能够帮助我们理解代码的逻辑。所以海龟作图也常被用作新手学习 Python 的一种方式。

1.1 Turtle motion (运动控制)

本节中包含了 运动控制 中常用的一些函数

turtle.goto(x,y)

画笔定位到坐标(x,y)

turtle.forward(distance)

向正方向运动 distance 长的距离

turtle.backward(distance)

向负方向运动 distance 长的距离

turtle.right(angle)

向右偏 angle 度

turtle.left(angle)

向左偏 angle 度

turtle.home()

回到原点

turtle.circle(radius, extent=None, steps=None)

画圆形 radius 为半径,extent 为圆的角度

turtle.speed(speed)

以 speed 速度运动

看到这么多函数肯定已经头大了,我们以例题来讲解。
首先画一个边长为100的正方形,然后再以半径为50画出其3/4圆。

# 控制画笔的速度
turtle.speed(5)
# 将画笔定位到原点
turtle.goto(0,0)
# 从原点开始,画出一个边长为100的正方形
for i in range(4):
# 正向运动 100 的距离
turtle.forward(100)
# 向右偏 90 度
turtle.right(90) # 将画笔定位到原点
turtle.home()
# 画出一个半径为100,占3/4的圆
turtle.circle(50,270)

结果:

1.2 Pen control (画笔控制)

本节包含了对画笔的控制函数,常用的如下:

turtle.pendown()

落笔,在此状态下会画出运动的轨迹

turtle.pendown()

起笔,在此状态下不会画出运动的轨迹

turtle.pensize(width=None)

画笔粗细

turtle.pencolor(*args)

画笔颜色

turtle.fillcolor(*args)

填充颜色

turtle.begin_fill()

开始填充

turtle.end_fill()

结束填充

turtle.write(arg, move=False, align=”left”, font=(“Arial”, 8, “normal”))

写文字

同样,我们以一个例题来讲解。
画一个正方形并填充,最后写一些文字

# 控制画笔颜色
turtle.pencolor('red')
# 落笔
turtle.pendown()
# 设置填充颜色
turtle.fillcolor('blue')
# 开始填充
turtle.begin_fill()
# 从原点开始,画出一个边长为100的正方形
for i in range(4):
# 正向运动 100 的距离
turtle.forward(200)
# 向右偏 90 度
turtle.right(90)
# 结束填充
turtle.end_fill()
turtle.penup()
turtle.goto(100,-100)
turtle.write('Crossin编程教室')

最后的结果是这样

同时,我们还可以设置画笔打粗细、画笔的速度等属性,

1.3 Window control (视窗控制)

这里有两个常用的函数

turtle.bgcolor(*args)

设置背景颜色

turtle.bgpic(picname=None)

背景图片填充
设置代码如下

turtle.bgcolor('red')
turtle.bgpic(r'yourpic.png')

2. 海龟绘图实例

我们用几个简单的例子讲解海龟绘图的用法。

2.1 用正方形画圆

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

360 个正方形每隔 1 度排列,短短几行代码可以生成一个漂亮规则的图形。

2.2 红色的五角星

使用填充功能画出一个大红星

import turtle
turtle.color('red','red')
turtle.begin_fill()
for i in range(5):
turtle.forward(100)
turtle.right(144)
turtle.end_fill()

结果如图:

动态时钟

# coding=utf-8

import turtle
from datetime import * # 抬起画笔,向前运动一段距离放下
def Skip(step):
turtle.penup()
turtle.forward(step)
turtle.pendown() def mkHand(name, length):
# 注册Turtle形状,建立表针Turtle
turtle.reset()
Skip(-length * 0.1)
# 开始记录多边形的顶点。当前的乌龟位置是多边形的第一个顶点。
turtle.begin_poly()
turtle.forward(length * 1.1)
# 停止记录多边形的顶点。当前的乌龟位置是多边形的最后一个顶点。将与第一个顶点相连。
turtle.end_poly()
# 返回最后记录的多边形。
handForm = turtle.get_poly()
turtle.register_shape(name, handForm) def Init():
global secHand, minHand, hurHand, printer
# 重置Turtle指向北
turtle.mode("logo")
# 建立三个表针Turtle并初始化
mkHand("secHand", 135)
mkHand("minHand", 125)
mkHand("hurHand", 90)
secHand = turtle.Turtle()
secHand.shape("secHand")
minHand = turtle.Turtle()
minHand.shape("minHand")
hurHand = turtle.Turtle()
hurHand.shape("hurHand") for hand in secHand, minHand, hurHand:
hand.shapesize(1, 1, 3)
hand.speed(0) # 建立输出文字Turtle
printer = turtle.Turtle()
# 隐藏画笔的turtle形状
printer.hideturtle()
printer.penup() def SetupClock(radius):
# 建立表的外框
turtle.reset()
turtle.pensize(7)
for i in range(60):
Skip(radius)
if i % 5 == 0:
turtle.forward(20)
Skip(-radius - 20) Skip(radius + 20)
if i == 0:
turtle.write(int(12), align="center", font=("Courier", 14, "bold"))
elif i == 30:
Skip(25)
turtle.write(int(i/5), align="center", font=("Courier", 14, "bold"))
Skip(-25)
elif (i == 25 or i == 35):
Skip(20)
turtle.write(int(i/5), align="center", font=("Courier", 14, "bold"))
Skip(-20)
else:
turtle.write(int(i/5), align="center", font=("Courier", 14, "bold"))
Skip(-radius - 20)
else:
turtle.dot(5)
Skip(-radius)
turtle.right(6) def Week(t):
week = ["星期一", "星期二", "星期三",
"星期四", "星期五", "星期六", "星期日"]
return week[t.weekday()] def Date(t):
y = t.year
m = t.month
d = t.day
return "%s %d%d" % (y, m, d) def Tick():
# 绘制表针的动态显示
t = datetime.today()
second = t.second + t.microsecond * 0.000001
minute = t.minute + second / 60.0
hour = t.hour + minute / 60.0
secHand.setheading(6 * second)
minHand.setheading(6 * minute)
hurHand.setheading(30 * hour) turtle.tracer(False)
printer.forward(65)
printer.write(Week(t), align="center",
font=("Courier", 14, "bold"))
printer.back(130)
printer.write(Date(t), align="center",
font=("Courier", 14, "bold"))
printer.home()
turtle.tracer(True) # 100ms后继续调用tick
turtle.ontimer(Tick, 100) def main():
# 打开/关闭龟动画,并为更新图纸设置延迟。
turtle.tracer(False)
Init()
SetupClock(160)
turtle.tracer(True)
Tick()
turtle.mainloop() if __name__ == "__main__":
main()

结果是一个动态的时钟,下图只是一个截图

python之海龟绘图的更多相关文章

  1. Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 7. 条件循环

    条件循环能够让程序在条件成立时(即为真时)重复执行循环体中的语句.如果条件一直成立(即永远不会为假),则循环会一直进行下去,不会停止.如果初始时,条件不成立,则循环 1 次也不会执行.Python 中 ...

  2. Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 6. 条件

    前面的教程中,我们已经可以让小海龟绘制出各种图形了.但是,所有绘图的代码都是预先编好的,程序一旦运行起来,运行结果(绘制的图形)就是固定不变的.这一节中,咪博士将教大家如何让海龟响应用户的输入. im ...

  3. Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 4. 函数

    什么样的程序员才是优秀的程序员?咪博士认为“慵懒”的程序员才是真正优秀的程序员.听起来不合逻辑?真正优秀的程序员知道如何高效地工作,而不是用不止境的加班来完成工作任务.函数便是程序员高效工作的利器之一 ...

  4. Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 3. 循环

    在前面的教程中,咪博士留了一道练习题给大家—-画正方形,相信聪明的你应该已经画出来了. 下面是咪博士实现的代码. 是不是跟你的代码很像呢? import turtle turtle.forward(2 ...

  5. Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 2. 变量

    大家在中学就已经学过变量的概念了.例如:我们令 x = 100,则可以推出 x*2 = 200 试试下面这段 Python 代码 import turtle turtle.shape("tu ...

  6. Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 1. 神秘朋友

    Python (Windows 下) 自带了一个非常有趣的 海龟绘图程序 (turtle),它是本系列课程的主角. 在 PyCharm 中,新建一个项目,然后在代码编辑器中输入 import turt ...

  7. Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 0. 准备工作

    一.关于 Python Python 是全球使用人数增长最快的编程语言!它易于入门.功能强大,从 Web 后端 到 数据分析.人工智能,到处都能看到 Python 的身影. Python 有两个主要的 ...

  8. python海龟绘图

    最近学了python,看了几本书之后,才明白python的强大,python是一种解释型的语言,即每写一行程序就执行一行. 而且在科学计算方面,处理的能力特别的方便. 比如python中的字典dict ...

  9. Python标准库 之 turtle(海龟绘图)

    turtle库介绍 首先,turtle库是一个点线面的简单图像库(也被人们成为海龟绘图),在Python2.6之后被引入进来,能够完成一些比较简单的几何图像可视化.它就像一个小乌龟,在一个横轴为x.纵 ...

随机推荐

  1. .NET开源类库Nini手册(INI、XML、注册表的配置应用)-中文翻译

    目录 1.简介 1.1什么是应用程序配置数据? 1.2问题 1.3介绍Nini 2.入门 2.1一个简单的例子 2.2默认值 2.3设置.保存和删除键 2.4添加和删除配置 2.5键值扩展 3.高级主 ...

  2. Toggle the WinForms Ribbon Interface 切换 WinForms 功能区界面

    In this lesson, you will learn how to enable/disable the Ribbon User Interface in your application. ...

  3. Zabbix自定义监控项(模板)

    虽然Zabbix提供了很多的模板(简单理解为监控项的集合),在zabbix界面点击share按钮就可以直接跳到模板大全的官方网站,但是由于模板内的监控项数量太多不好梳理且各种模板质量参差不齐,还是建议 ...

  4. Redis基础类型常用操作命令

    Redis基础类型常用操作命令 概念:Redis是用C语言开发的一个开源的高性能键值对数据库. 特征: 数据间没有必然的联系 内部采用单线程机制进行工作 高性能 多数据类型支持 字符串类型 Strin ...

  5. Oracle ASM无法识别扩展分区的磁盘设备

    在linux 环境下,我们一般通过udev或者asmlib来绑定磁盘分区作为ASM的候选存储单元.在使用udev的情况下,一般只要我们可以看到被绑定的磁盘的设备,并且这些设备的属主和权限没有问题,AS ...

  6. CentOS高可用集群LVS+Keepalived(DR模式)

    操作系统:CentOS6.5_x64 mini 负载均衡模式:DR(直接路由) LVS与Keepalived简述: LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是 ...

  7. CentOS自动化安装LAMP脚本

    #!/bin/bash #-- #blog:lizhenliang.blog.51cto.com ########## function ########## depend_pkg () { yum ...

  8. Linux各目录的意义

    目录层次表准FHS FHS(Filesystem Hierarchy standard) FHS定义两层规范:1.“/”目录下的各个目录应该放什么文件数据 2.针对/usr /var两个目录的子目录来 ...

  9. Unity3D 截取6面图 做全景图脚本

    using System.Collections;using System.Collections.Generic;using UnityEditor;using UnityEngine; publi ...

  10. WEB UI分布式自动化测试框架

    Github地址: https://github.com/zhangweixu/Autotest.git