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 用正方形画圆

importturtlefor i in range(360):

turtle.setheading(i)for i in range(4):

turtle.forward(100)

turtle.left(90)

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

2.2 红色的五角星

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

importturtle

turtle.color('red','red')

turtle.begin_fill()for i in range(5):

turtle.forward(100)

turtle.right(144)

turtle.end_fill()

结果如图:

动态时钟

#coding=utf-8

importturtlefrom datetime import *

#抬起画笔,向前运动一段距离放下

defSkip(step):

turtle.penup()

turtle.forward(step)

turtle.pendown()defmkHand(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)defInit():globalsecHand, 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 insecHand, minHand, hurHand:

hand.shapesize(1, 1, 3)

hand.speed(0)#建立输出文字Turtle

printer =turtle.Turtle()#隐藏画笔的turtle形状

printer.hideturtle()

printer.penup()defSetupClock(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)defWeek(t):

week= ["星期一", "星期二", "星期三","星期四", "星期五", "星期六", "星期日"]returnweek[t.weekday()]defDate(t):

y=t.year

m=t.month

d=t.dayreturn "%s %d%d" %(y, m, d)defTick():#绘制表针的动态显示

t =datetime.today()

second= t.second + t.microsecond * 0.000001minute= t.minute + second / 60.0hour= t.hour + minute / 60.0secHand.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)defmain():#打开/关闭龟动画,并为更新图纸设置延迟。

turtle.tracer(False)

Init()

SetupClock(160)

turtle.tracer(True)

Tick()

turtle.mainloop()if __name__ == "__main__":

main()

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

python海龟绘图圆形_python之海龟绘图相关推荐

  1. python turtle 乌龟赛跑_Python编程 | 海龟绘图:Turtle Race 海龟赛跑游戏

    AD: 购买本站源码请联系QQ677123或右侧QQ在线. 老师介绍 郑Sir@天港成编程营 郑Sir@天港成编程营 零基础 python 入门,在游戏中学会编程 ,不可错过的python编程课,免费 ...

  2. python使用turtle步骤_Python+turtle交互式绘图:可以用鼠标拖动的小海龟

    下面是我画海龟的过程: (1)打开python: 2.调用turtle库,先设置一些基础设置,与一个画龟的函数 from turtle import Screen,Turtle,mainloop cl ...

  3. python 小海龟鼠标画图_Python小海龟画图

    import turtle ''' 运动命令 forward(d) 向前移动d长度 backward(d) 向后移动d长度 right(d) 向右移动d长度 left(d) 向左一定d长度 goto( ...

  4. python画图的模块_python强大的绘图模块matplotlib示例讲解

    Matplotlib 是 Python 的绘图库.作为程序员,经常需要进行绘图,在我自己的工作中,如果需要绘图,一般都是将数据导入到excel中,然后通过excel生成图表,这样操作起来还是比较繁琐的 ...

  5. python如何绘制饼图_Python使用Plotly绘图工具,绘制饼图

    今天我们来学习一下如何使用Python的Plotly绘图工具,绘制饼图 使用Plotly绘制饼图的方法,我们需要使用graph_objs中的Pie函数 函数中最常用的两个属性values,用于赋值给需 ...

  6. python画黑白线条_Python实现手绘图效果实例分享

    首先我们来看看原图: 接着我们来看看效果图: 通过分析我们不难发现以下特征: 主要颜色为黑白灰 边界线条较重 相同或相近色趋于白色 略有光源效果 需要用到的库有: numpy PIL 代码实现: im ...

  7. python手绘教学_Python实现手绘图效果实例分享

    首先我们来看看原图: 接着我们来看看效果图: 通过分析我们不难发现以下特征: 主要颜色为黑白灰 边界线条较重 相同或相近色趋于白色 略有光源效果 需要用到的库有: numpy PIL 代码实现: im ...

  8. python中plt.plot()_python plt.plot()绘图

    推荐用电脑绘图, 如果是安卓手机, 推荐  应用汇 --   pydroid. # 本文的命令都要调用的包包, # 此外 再次强调 for 条件  要加冒号 :  回车后循环体要加四个空格 impor ...

  9. python手绘效果图_Python实现手绘图

    利用python的Numpy及PIL第三方库实现图片的手绘效果.PIL第三方库是一个具有强大图像处理能力的第三方库. 数字图像数据可以用矩阵来表示,因此可以采用矩阵理论和矩阵算法对数字图像进行分析和处 ...

最新文章

  1. 我国科学家成功研制全球神经元规模最大的类脑计算机
  2. Go语言实战读书笔记
  3. Android中实现不同文字颜色和图文混排的Span总结
  4. 05 | REST消息通信:如何使用 OpenFeign 简化服务间通信
  5. MVC UpdateModel的未能更新XXXXX的类型模型
  6. 数据结构与算法--两个链表中第一个公共节点
  7. 【超级鼠标键盘锁】之实现思路(非驱动实现)
  8. Intellij IDEA 中的 Debug 控制台输出窗口消失
  9. jira怎么提交bug_请停止编写糟糕的提交消息!
  10. mysql与nagios的结合使用
  11. 苹果6邮件服务器错了如何修改,苹果手机ID电子邮件设错了怎么改
  12. 含指数函数的不定积分方法归纳
  13. 手机玩exe游戏的模拟器_手机就能玩Switch游戏,蛋蛋模拟器+盖世小鸡X2手柄体验...
  14. YouTube-dl命令报错
  15. 数据库10大常见安全问题盘点
  16. 15款好用的web开源安全测试工具等你来
  17. 新浪微博视频下载教程
  18. 【项目】前端实习——知识库项目总结
  19. ACL-IJCAI-SIGIR顶级会议论文报告会(AIS 2022)笔记2:分析与可解释性
  20. 关于 laravel-wechat / easywechat-composer 装不上问题

热门文章

  1. PHP标题获取数据库内容,php – 如何从数据库获取项目的标题并将其发送到CodeIgniter中的标题模板...
  2. php 开启,PHP服务的开启详细步骤
  3. android页面跳转时获取地址栏,Android 利用scheme页面内跳转协议进行跳转
  4. Java连接Mysql数据库(JDBC)
  5. 新颖的c语言题目,新颖版c语言经典习题100例(全面面)
  6. java中number类型能否相除_Java中 如果复数类成员是int型,怎么实现两个复数相除...
  7. php 截取音频文件后缀名,使用PHP从音频流中提取音轨信息
  8. android 保活方案_Android 后台保活手段总结 (上篇)
  9. 控制台:Unable to import maven project: See logs for details日志:Unable to create injector, see the follow
  10. Angular实现dialog对话框封装