python3-turtle(1)

news2025/2/26 9:43:38

turtle 是海龟绘图模块,海龟绘图很适合用来引导孩子学习编程,最初构想来自于 Wally Feurzeig, Seymour Papert 和 Cynthia Solomon 于 1967 年所创造的 Logo 编程语言,它是基于tkinter 模块打造,提供简单的绘图方法。
turtle模块假定在绘图区有一只机器海龟,起始位置在 x-y 平面的 (0, 0) 点,通过组合使用前进、旋转等命令,在平面坐标系中移动,爬行的路径将绘制图形,这样就可以轻松地绘制出精美的形状和图案。turtle的绘图区使用平面坐标系,如下图所示:
在这里插入图片描述

画线

先从画简单的线段开始讲解,假设有这样的程序:先执行 import turtle,再执行 turtle.forward(95),它将(在屏幕上)朝所面对的 x 轴正方向前进 95 像素,随着它的移动画出一条线段;然后再执行 turtle.right(25),它将原地右转 25 度。程序如代码2-7-1.py所示:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#2-7-1.py
import turtle
turtle.forward(95)
turtle.right(25)

print('按回车键退出')
input()

程序执行结果如下:
在这里插入图片描述
上面程序用到了turtle模块的以下几个方法:
1、turtle.forward(distance)
海龟前进 distance 指定的距离,方向为海龟的朝向。该方法也可以写成如下格式:
turtle.fd(distance)
其中,distance为数值 (整型或浮点型)
下面代码演示了该方法的使用。

>>> turtle.position()
(0.00,0.00)
>>> turtle.forward(25)
>>> turtle.position()
(25.00,0.00)
>>> turtle.forward(-75)
>>> turtle.position()
(-50.00,0.00)

上面代码执行过程如下:
1、turtle.position()输出当前位置(0,0)。
2、turtle.forward(25)前进25,那么就是向x轴正方向移动25,然后,turtle.position()输出当前位置(25,0)。
3、turtle.forward(-75)前进-75,就是倒退75,向x轴负方向移动75,然后,turtle.position()输出当前位置(-50.00,0.00)。

颜色

代码2-7-2.py将当前画笔颜色和填充颜色分别设为绿色Green和黄色yellow,然后,向前进105像素。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#2-7-2.py
import turtle
turtle.color('Green','yellow')
turtle.forward(105)

print('按回车键退出')
input()

程序执行结果如下:
在这里插入图片描述

程序2-7-2.py使用turtle.color设置颜色,调用格式如下:
turtle.color(*args)
返回或设置画笔颜色和填充颜色,其中args为参数元组,可包括0-3个参数。


> 提示:Python的函数可以处理不同数量的参数,参数数量可变化,这种参数称为可变参数,使用“*”(元组)或“**”(字典)作为前缀。比如:“*args”前面的“*”表示参数以元组的形式存储在
> arg中;“**kwargs”前面的“**”表示参数以字典的形式存储在 kwargs中。

turtle.color可如下使用 0 -3 个参数:
1、无参数,格式如下:
color()
返回以当前画笔颜色和填充颜色的一对颜色(用字符串或元组表示),两者可分别由 pencolor() 和 fillcolor() 返回。
2、设置颜色,格式如下:
(1)color(colorstring)
设置画笔颜色为 colorstring 指定的 Tk 颜色描述字符串,例如 “red”、“yellow” 。
(2)color((r,g,b))或color(r,g,b)
设置画笔颜色为以 r, g, b 元组表示的 RGB 颜色。r, g, b 的取值范围应为 0…colormode,colormode 的值为 1.0 或 255 。
(3)color(colorstring1, colorstring2)
设置画笔颜色和填充颜色为指定的值。colorstring1表示画笔颜色,而 colorstring2表示填充颜色。
(4)color((r1,g1,b1), (r2,g2,b2))
设置画笔颜色和填充颜色为指定的值。第一个参数(r1,g1,b1)表示画笔颜色,第二个参数(r2,g2,b2)表示填充颜色。

左转与右转

1、左转
使用left函数完成海龟左转 angle 个单位。具体格式如下:
turtle.left(angle)或turtle.lt(angle)
其中,参数angle为一个数值(整型或浮点型),表示海龟左转 angle 个单位(单位默认为角度)
此外,还有如下2个函数经常和转向搭配使用:
(1)turtle.heading(),该函数返回海龟当前的朝向。
(2)turtle.home(),该函数将海龟移至初始坐标 (0,0),并设置朝向为初始方向。
下面举几个例子讲解:
(1)下面代码首先通过turtle.heading()返回当前朝向角度为22度;然后,再通过turtle.left(45)左转45度;最后,通过 turtle.heading()返回朝向角度22+45=67度。

>>> turtle.heading()
22.0
>>> turtle.left(45)
>>> turtle.heading()
67.0

(2)下面代码段首先通过turtle.heading()返回当前朝向角度为90度,并通过turtle.position()返回当前位置为(0.00,-10.00);然后,通过turtle.home()将位置和初始方向进行初始化,并返回初始化后的位置和角度;接着,通过turtle.fd(60)前进60,并返回当前角度为0度,位置为(60.00,-0.00);最后,通过turtle.lt(25) 左转25度,并通过turtle.position()返回当前位置(60.00,-0.00),通过turtle.heading()返回当前角度为25度。

>>>turtle.heading()
90.0
>>> turtle.position()
(0.00,-10.00)
>>> turtle.home()
>>> turtle.position()
(0.00,0.00)
>>> turtle.heading()
0.0
>>>turtle.fd(60)
>>>turtle.heading()
0.0
>>>turtle.position()
(60.00,-0.00)
>>>turtle.lt(25)
>>>turtle.position()
(60.00,-0.00)
>>>turtle.heading()
25.0

2、右转
使用right函数完成海龟右转 angle 个单位。具体格式如下:
(1)turtle.right(angle)
(2)turtle.rt(angle)
其中,参数angle为一个数值(整型或浮点型),表示海龟左转 angle 个单位(单位默认为角度)。
下面代码先返回当前朝向角度为22度,再右转45度,最后返回当前朝向角度为22+360-45=337度。

>>> turtle.heading()
22.0
>>> turtle.right(45)
>>> turtle.heading()
337.0

画正方形

程序2-7-4.py使用海龟在屏幕上画一个正方形,画笔颜色为绿色,填充颜色为黄色。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#2-7-4.py
import turtle
turtle.color('Green','yellow')
turtle.forward(75)
turtle.left(90)
turtle.forward(75)
turtle.left(90)
turtle.forward(75)
turtle.left(90)
turtle.forward(75)
print('按回车键退出')
input()

程序2-7-4首先通过turtle.color(‘Green’,‘yellow’)设定画笔颜色和填充颜色;然后,依次执行4次动作序列:forward前进、left左转
程序运行结果如下:
在这里插入图片描述

画圆

turtle.circle函数完成画圆或圆弧功能,其调用格式如下:
turtle.circle(radius, extent=None, steps=None)
该函数的3个参数含义如下:
radius – 数值,指定半径。圆心在海龟左边 radius 个单位, radius 为正值则朝逆时针方向绘制圆弧,否则朝顺时针方向。
extent – 数值 (或 None), 为一个夹角,用来决定绘制圆的一部分。未指定 extent则绘制整个圆,如果 extent 不是完整圆周,则以当前画笔位置为一个端点绘制圆弧。
steps – 整型数 (或 None),内切正多边形边的数量。圆实际是以其内切正多边形来近似表示的,其边的数量由 steps 指定。如果未指定边数则会自动确定。此方法也可用来绘制正多边形。
程序2-7-5-1.py绘制。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#2-7-5-1.py
import turtle
turtle.home()
turtle.bk(300)
turtle.home()
turtle.fd(300)
turtle.home()
turtle.lt(90)
turtle.fd(300)
turtle.home()
turtle.rt(90)
turtle.fd(300)
turtle.home()
turtle.color('green')
turtle.circle(120)
turtle.home()
turtle.color('red')
turtle.circle(-60)
turtle.up()
turtle.color('blue')
turtle.goto(0,-120)
turtle.down()
turtle.circle(120)
print('按回车键退出')
input()

程序运行结果如下:
在这里插入图片描述

程序2-7-5-1.py中除了turtle.circle函数,还使用了以下几个函数:
1、turtle.back函数
该函数完成后退功能,方向与海龟的朝向相反。不改变海龟的朝向。调用格式如下:
(1)turtle.back(distance)
(2)turtle.bk(distance)
(3)turtle.backward(distance)
其中,参数distance为数值,表示海龟后退 distance 指定的距离。
函数使用方法如下面代码所示:

>>> turtle.position()
(0.00,0.00)
>>> turtle.backward(10)
>>> turtle.position()
(-10.00,0.00)

2、turtle.up函数
该函数表示画笔抬起,即:移动时不画线。调用格式如下:
(1)turtle.penup()
(2)turtle.pu()
(3)turtle.up()
3、turtle.down函数
该函数表示画笔落下,即:移动时将画线。调用格式如下:
(1)turtle.pendown()
(2)turtle.pd()
(3)turtle.down()
4、turtle.goto函数
该函数将海龟移动到一个绝对坐标。如果画笔已落下将会画线。不改变海龟的朝向。调用格式如下:
(1)turtle.goto(x, y=None)
(2)turtle.setpos(x, y=None)
(3)turtle.setposition(x, y=None)
其中,参数x为数值或数值对/向量,y 为数值或 None。如果 y 为 None,x 应为一个表示坐标的数值对或 Vec2D 类对象 (例如 pos() 返回的对象),否则x和y分别为坐标(x,y)的x和y的值。
函数使用方法如下面代码所示:

 >>> nowPos = turtle.pos()
 >>> nowPos
 (0.00,0.00)
 >>> turtle.setpos(10,90)
 >>> turtle.pos()
 (10.00,90.00)
 >>> turtle.setpos((28,10))
 >>> turtle.pos()
 (28.00,10.00)
 >>> turtle.setpos(nowPos)
 >>> turtle.pos()
 (0.00,0.00)

程序2-7-5-1.py执行过程如下:
1、通过先调用home()回到原点,然后再通过bk和fd函数移动的方式,依次绘制x轴的正方向和负方向。代码片断如下:
turtle.home()
turtle.bk(300)
turtle.home()
turtle.fd(300)
2、通过先调用home()回到原点,然后再通过color函数设置绘制颜色为绿色,最后,绘制一个半径为120的圆,但圆心不在原点处,海龟从原点开始向逆时钟向上画圆(半径为正数表示逆时钟绘制),圆心在(0,120)处。圆的底部与x轴交于原点。代码片断如下:
turtle.home()
turtle.color(‘green’)
turtle.circle(120)
3、通过先调用home()回到原点,然后再通过color函数设置绘制颜色为红色,最后,绘制一个半径为60的圆,但圆心不在原点处,海龟从原点开始向顺时钟向下画圆(半径为负数表示顺时钟绘制),圆心在(0,-60)处。圆的顶部与x轴交于原点。代码片断如下:
turtle.home()
turtle.color(‘red’)
turtle.circle(-60)
4、通过先调用up函数抬起画笔,以便下一步移动不画线,然后再通过color函数设置绘制颜色为蓝色,接着,海龟移动到(0,-120),落下画笔,最后,从(0,-120)出发,绘制一个半径为120的圆,圆心在原点处,开始向逆时钟向上画圆(半径为正数表示逆时钟绘制)。圆的顶部与x轴交于原点。代码片断如下:

turtle.up()
turtle.color(‘blue’)
turtle.goto(0,-120)
turtle.down()
turtle.circle(120)

 渐变条

本例需要用到以下几个函数。
1、turtle.pensize函数
设置线条的粗细为 width 或返回该值。调用格式如下:
(1)turtle.pensize(width=None)
(2)turtle.width(width=None)
其中,参数width 为正数值。如果 resizemode 设为 “auto” 并且 turtleshape 为多边形,该多边形也以同样组细的线条绘制。如未指定参数,则返回当前的 pensize。具体方法见下面代码:

>>> turtle.pensize()
1
>>> turtle.pensize(8)   # 从下面代码开始用宽度为8的线进行绘制。
....
.....
>>> turtle.pensize(1)   # 从下面代码恢复宽度初始值,即:用宽度为1的线进行绘制。

2、turtle.color函数
前面已经介绍过,但本例中参数为r、g、b,它们分别是RGB 颜色的分量。RGB色彩模式是工业界的一种颜色标准,是通过对红®、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是运用最广的颜色系统之一。
3、screen.colormode函数
返回颜色模式或将其设为 1.0 或 255。构成颜色三元组的 r, g, b 数值必须在 0…cmode 范围之内。调用格式如下:
turtle.colormode(cmode=None)
参数cmode为数值 1.0 或 255 之一,下面代码演示了其使用方法:

>>> screen.colormode(1)
>>> turtle.pencolor(240, 160, 80)#程序报错,参数数值超过1。
Traceback (most recent call last):
     ...
TurtleGraphicsError: bad color sequence: (240, 160, 80)
>>> screen.colormode()#恢复参数数值上限为1。
1.0
>>> screen.colormode(255)#设置参数数值上限为255
>>> screen.colormode()#返回参数数值上限
255
>>> turtle.pencolor(240,160,80)#设置颜色R、G、B的值分别为240、160、80。

程序2-7-6.py通过颜色的RGB值依次递增16,在屏幕上逐行绘制渐变条。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#2-7-6.py
import turtle

ts = turtle.getscreen()
ts.colormode(255)
turtle.up()
turtle.goto(-300,-300)
turtle.down()
posX,posY=turtle.position()
turtle.pensize(2) 
for r in range(0,256,16):
    for g in range(0,256,16):
        for b in range(0,256,16):
            turtle.color(r,g,b)
            turtle.fd(6)            
        posY+=2
        posX=-300
        turtle.up()
        turtle.goto(posX,posY)
        turtle.down()        
ts.colormode(1)
print('按回车键退出')
input()

程序2-7-6.py的执行过程依次为:
1、通过 turtle.getscreen()取得屏幕对象screen,然后通过ts.colormode(255)设置颜色上限范围。
2、通过turtle.up()提起画笔,然后通过turtle.goto(-300,-300)移动到(-300,-300)处,再通过turtle.down()落下画笔。
3、通过posX,posY=turtle.position()取得海龟位置,再通过turtle.pensize(2)设置画笔线条的粗细。
4、通过下面代码段绘制渐变条,通过R、G、B三色依次从0递增到256,每次递增16。在绘制过程中,b值完成循环递增后,在上方重新定义海龟位置,将x值设为-300,将y值增加2,并移动到新位置,再继续循环绘制。

for r in range(0,256,16):
    for g in range(0,256,16):
        for b in range(0,256,16):
            turtle.color(r,g,b)
            turtle.fd(6)
        posY+=2
        posX=-300
        turtle.up()
        turtle.goto(posX,posY)
        turtle.down()    

5、通过ts.colormode(1)重新设置颜色范围上限为1。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/39468.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

集合框架----源码解读ArrayList篇

1.ArrayList<E> ArrayList是继承AbstractList<E> List 接口的可调整数组实现。实现所有可选的列表操作&#xff0c;并允许所有元素&#xff0c;包括null。除了实现List接口之外&#xff0c;该类还提供了一些方法来操作内部用于存储列表的数组的大小。(这个类大致相…

准备蓝桥杯的宝贝们看过来,二分法一网打尽(基础篇)

今天给大家介绍一下简单的二分法&#xff08;刷题第一步&#xff01;&#xff09; 二分基础题链接 二分查找有个很明显的特点就是有序&#xff0c;这个特点同学如果在题中看到就要格外注意 一定要看完&#xff0c;基本的三种解法&#xff0c;后面还有真题链接哦&#xff01;…

异步请求-AJAX

什么是同步交互 首先用户向HTTP服务器提交一个处理请求。接着服务器端接收到请求后&#xff0c;按照预先编写好的程序中的业务逻辑进行处理&#xff0c;比如和数据库服务器进行数据信息交换。最后&#xff0c;服务器对请求进行响应&#xff0c;将结果返回给客户端&#xff0c;返…

TCP三次握手与四次挥手

TCP三次握手的建立与四次挥手的过程 TCP协议 TCP 用于处理实时通信TCP是基于端口&#xff0c;面向连接的传输层协议TCP的握手和挥手本质上都是四次&#xff0c;只不过握手合并成三次。因为主机之间要想通信需要先建立双向数据通道TCP的主要特点是传输稳定性高&#xff0c;但是…

[自建题库]c认证初级

UTF-8的编码实现方式有几种? UTF8-1 / UTF8-2 / UTF8-3 / UTF8-4 二进制数1111.1111转换成十进制数是多少&#xff1f; 如果二进制数字“1000111______”采取偶校验&#xff0c;那么下划线的校验位处应该填什么&#xff1f; 0 在MPEG-4中&#xff0c;第九部分定义了IP网络传…

JS高级-语言特性(持续更新一)

JS高级-语言特性 JS高级-语言特性 一、JS面向对象编程 1.1面向对象介绍 1.2面向对象编程 1.3创建对象 二、构造函数 2.1构造函数 2.2构造函数存在的问题 三、原型 3.1构造函数的prototype属性 3.2构造函数、实例、原型三者之间的关系 3.3原型对象的获取及修改 3.4原…

[附源码]Python计算机毕业设计高校电子作业提交与批改系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;我…

CTFHub | Refer注入

0x00 前言 CTFHub 专注网络安全、信息安全、白帽子技术的在线学习&#xff0c;实训平台。提供优质的赛事及学习服务&#xff0c;拥有完善的题目环境及配套 writeup &#xff0c;降低 CTF 学习入门门槛&#xff0c;快速帮助选手成长&#xff0c;跟随主流比赛潮流。 0x01 题目描述…

[C#] GDI+ 之鼠标交互:原理、示例、一步步深入、性能优化

一、前言 “GDI”与“鼠标交互”&#xff0c;乍一听好像不可能&#xff0c;也无从下手&#xff0c;但是实现原理比想象中要简单很多。 基于“GDI”的“交互”&#xff0c;应用场景也很多&#xff0c;比如&#xff1a;流程图、数据图表、思维导图等等。 本篇文章就通过多个示例…

美新科技IPO过会:9个月营收6亿 林东融三兄弟为实控人

雷递网 雷建平 11月26日美新科技股份有限公司&#xff08;简称&#xff1a;“美新科技”&#xff09;日前IPO过会&#xff0c;准备在深交所创业板上市。美新科技计划募资9.58亿元&#xff0c;其中&#xff0c;5.1亿元用于美新科技新型环保塑木型材产业化项目&#xff08;一期&a…

基于HTML+CSS+JavaScript制作学生网页——外卖服务平台10页带js 带购物车

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | HTML期末大学生网页设计作业 HTML&#xff1a;结构 CSS&#xff1a;样式 在操作方面上运用了html5和css3&#xff0c; 采用了divcss结构、表单、超链…

[附源码]SSM计算机毕业设计拾穗在线培训考试系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

JS逆向 Frida - 夜神模拟器安装配置 基本使用

JS逆向 Frida - 夜神模拟器安装配置 基本使用 文章目录JS逆向 Frida - 夜神模拟器安装配置 基本使用前言一、Frida简单介绍&#xff1f;1.Frida是什么2.Frida原理(建议了解一下&#xff0c;否则后续的安装会有些懵懂)二、Frida下载1.pip安装frida模块2.查看本地的frida版本&…

大数据项目之电商数仓DataX、DataX简介、DataX支持的数据源、DataX架构原理、DataX部署

文章目录1. DataX简介1.1 DataX概述1.2 DataX支持的数据源2. DataX架构原理2.1 DataX设计理念2.2 DataX框架设计2.3 DataX运行流程2.4 DataX调度决策思路2.5 DataX与Sqoop对比3. DataX部署3.1 下载DataX安装包并上传到hadoop102的/opt/software3.2 解压datax.tar.gz到/opt/modu…

一、微服务入门

文章目录一、微服务大概认识二、单体架构架构和分布式架构三、微服务架构特征四、微服务技术对比五、SpringCloud 与 SpringBoot版本兼容关系如下&#xff1a;一、微服务大概认识 二、单体架构架构和分布式架构 单体架构&#xff1a;将业务的所有功能集中在一个项目中开发&…

一文弄懂 Diffusion Model

什么是 Diffusion Model 一、前向 Diffusion 过程 Diffusion Model 首先定义了一个前向扩散过程&#xff0c;总共包含T个时间步&#xff0c;如下图所示&#xff1a; 最左边的蓝色圆圈 x0 表示真实自然图像&#xff0c;对应下方的狗子图片。 最右边的蓝色圆圈 xT 则表示纯高斯…

Tomcat安装及配置和常见的问题(2022最新详解、图文教程)

Tomcat的配置安装1. 关于WEB服务器软件2. 配置Tomcat的服务器第一步&#xff1a;配置Java的运行环境第二步&#xff1a;Tomcat的安装第三步&#xff1a;启动Tomcat3. 问题一&#xff1a;解决Tomcat服务器在DOS命令窗口中的乱码问题&#xff08;控制台乱码&#xff09;4. 测试To…

问题盘点|使用 Prometheus 监控 Kafka,我们该关注哪些指标

Kafka 作为当前广泛使用的中间件产品&#xff0c;承担了重要/核心业务数据流转&#xff0c;其稳定运行关乎整个业务系统可用性。本文旨在分享阿里云 Prometheus 在阿里云 Kafka 和自建 Kafka 的监控实践。01Kafka 简介Aliware01Kafka 是什么&#xff1f;Kafka 是分布式、高吞吐…

算法选修(J.琴和可莉)(为选修画上句号)

可莉又去池塘炸鱼啦&#xff01;琴团长决定亲自捉拿可莉将其关禁闭。琴团长不断地追&#xff0c;可莉不断地跑。 琴团长和可莉的行动路线可以看做是一个有n个节点的无根树&#xff0c;初始时琴团长在A点&#xff0c;可莉在B点&#xff0c;她们互相知道对方的位置。 琴团长想尽…

P8869 [传智杯 #5 初赛] A-莲子的软件工程学

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);long a sc.nextLong();long b sc.nextLong();System.out.println(Math.abs(a)*(b>0?1:-1));}} 题目背景 在宇宙射线的轰击下&#xff0c;莲子…