python中的turtle

turtle个别指令

初始箭头默认指向为东(右)

往前(右)三个格:turtle.forward(3)

往后(左)三个格:turtle.backward(3)

往左转90度:turtle.left(90)

往右转90度:turtle.right(90)

画笔设置成小海龟:turtle.shape('turtle')

小海龟朝东:turtle.setheading(0)

小海龟朝西:turtle.setheading(180)

将画笔抬起:turtle.penup()

移动坐标系:turtle.goto(-50, 0)

将画笔落下:turtle.pendown()

为图画署名:turtle.write('By 黄帮主',  font = ('SimHei', 12, 'bold'))

【(箭头:arrow)、(圆:circle)、(正方形:square)、(三角形:triangle)和 (经典:classic)】

turtle简介

turtle 是 Python 中自带的绘图模块,最初来自于 Wally Feurzeig, Seymour Papert 和 Cynthia Solomon 于 1967 年所创造的 Logo 编程语言。

大家有兴趣可以去官方文档了解更多。官方文档地址:turtle --- 海龟绘图 — Python 3.12.4 文档

你可以把教学环境中运行结果区域想象成一个画板,而你使用 turtle 控制画笔在画板上画画。而这个画笔是有形状的,默认是一个小箭头,我们可以使用 turtle.shape('turtle') 将其设成一个小海龟。除了变成小海龟外,还支持传入 'arrow'(箭头),'circle'(圆),'square'(正方形),'triangle'(三角形)和 'classic'(经典),一会儿你可以在编程练习中试试它们都是什么效果。

默认状态下,我们的画笔是落在画板最中间的,并以此为原点形成了一个坐标系,单位是像素。并且我们根据“上北下南左西右东”的惯例标注四个方向。实际上这个坐标系是不显示的,但我们要知道小海龟实际上是在坐标系内移动的。

 

小海龟头的朝向是前方(默认朝东),我们可以调用 turtle.forward(3) 让小海龟前进 3 像素,也就是小海龟移动到了坐标系中 (3, 0) 的位置。因为我们的画笔默认是落下的,因此在移动的过程中会留下一道轨迹,即一条长 3 像素的直线。

除了前进之外,当然也有后退。调用 turtle.backward(3) 即可让小海龟向后倒退 3 像素,移动到坐标系中 (-3, 0) 的位置,同样也会留下一条长 3 像素的直线。

注意:后退后小海龟的朝向是不变的。之后我们会学习让小海龟转向,也就是调整小海龟前进的方向。

画笔的颜色默认是黑色的,我们可以使用 turtle.color('red') 改成红色的。当然,你也可以使用 turtle.color('yellow') 改成黄色,使用 turtle.color('pink') 改成粉色等等。

除了使用颜色的英文外,我们还能传入 16 进制的 RGB 色值。RGB 色值能表示出 1600 多万种颜色,比如 #000000 表示黑色,#FFFFFF 表示白色,#FF0000 表示红色等。这里只是提及一下,不要求掌握,有兴趣的同学可以自行了解更多。

编程练习

说了这么多,试一下你就知道 turtle 绘图究竟是怎么回事了。

下面向前画了一条长 100 像素的红色直线,请你按要求改写代码。

要求:

  1. 将画笔形状设置为小海龟;
  2. 将画笔颜色设置成黄色(yellow);
  3. 向后画一条长 100 像素的直线。
import turtleturtle.shape('turtle')
turtle.color('yellow')
turtle.backward(100)

我们初步了解了 turtle,并学会了使用 turtle 画一条任意颜色的直线了。前后移动我们学会了,接下来跟着我一起学习如何让小海龟转弯!

注意:如果你在本地环境使用 turtle 画图,图形绘制完毕后程序会自动退出。需要在代码最后加上 turtle.done() 来防止程序自动退出。

转弯其实很简单,分为左转和右转。左转是 turtle.left(),右转是 turtle.right()。它俩的参数是角度,比如 turtle.right(90) 表示右转 90 度。同理,turtle.left(90) 表示左转 90 度。

转向后,小海龟的朝向就变了。再调用 turtle.forward() 会朝着转向后小海龟头指着的方向前进。想想一下,重复 4 次向前走 100 像素然后右转 90 度会画出什么形状?

import turtleturtle.forward(100)
turtle.right(90)
turtle.forward(100)
turtle.right(90)
turtle.forward(100)
turtle.right(90)
turtle.forward(100)
turtle.right(90)

想到了吗?是一个宽 100 像素的正方形!上面代码重复了四次,我们可以用循环来简化一下:

turtle.left() 和 turtle.right() 每次转向都是根据当前朝向来转的,当多次转向后你可能就不知道现在朝向哪了。因此,我们还可以使用 turtle.setheading() 来直接设置朝向。turtle.setheading() 的参数也是角度,只是这个角度对应的朝向是固定的。具体对应方式如下图所示:

因此,我们可以直接调用 turtle.setheading(0) 让小海龟朝东,调用 turtle.setheading(180) 让小海龟朝西。当然,0 到 360 度之间的角度都是可以的,调用 turtle.setheading(45) 可以让小海龟朝向东北方向。

之前显示小海龟是为了方便理解朝向,现在弄清楚了朝向我们就可以将小海龟隐藏了。隐藏小海龟可以加快绘图的速度,并且最后画出的图上也不会有个小海龟影响画风。

要隐藏小海龟非常的简单,只要调用 turtle.hideturtle() 即可。当你想再次显示小海龟时,调用 turtle.showturtle() 即可。方法名一目了然是不是?我们在写代码时也要注意命名,有了清晰可读的命名,我们一眼就能知道作用,连文档都不用看了。

画一颗五角星

前面的练习中,我们学会了画任意边数的正多边形。那你知道五角星怎么画吗?不会也没关系,接下来我来教你。

五角星每个角的度数都是 36 度,用 180 - 36 得到对应的补角为 144 度。如下图所示:

五角星的五条线的长度是一样的,并且角度也一样。那么,我们就可以用循环来画五角星。五角星要画 5 条线,因此要循环 5 次。每次循环都除了画一条线,还要旋转特定的角度。从上图可知,每次向右旋转 144 度即可。所以画五角星的代码如下:

import turtleturtle.color('red')
turtle.hideturtle()for i in range(5):turtle.forward(100)turtle.right(144)

这样,我们就得到了一个边长 为 100 像素的五角星了。但这还不够,我们还要给五角星上色。上色需要设置填充颜色,turtle.color() 会将画笔颜色和填充颜色都设置成一个。而调用 turtle.fillcolor() 能单独设置填充颜色,你也可以调用 turtle.pencolor() 单独设置画笔颜色。

设置好填充颜色之后,我们就可以开始正式给五角星上色了。上色需要调用两个方法,分别是 turtle.begin_fill() 和 turtle.end_fill()。从名字就可以知道,一个是开始填充一个是结束填充。

我们只要在画五角星之前调用 turtle.begin_fill(),在画完五角星之后调用 turtle.end_fill(),我们画的五角星就会被填充上我们设置好的颜色了。画一个红色五角星的完整代码如下:

import turtleturtle.color('red')
turtle.hideturtle()turtle.begin_fill()  # 开始填充
for i in range(5):turtle.forward(100)turtle.right(144)
turtle.end_fill()  # 结束填充

编程练习

说了这么多,你肯定很好奇用 Python 画出来的五角星长什么样了吧,那就赶快来画一个看看吧!

补全下列代码,画出一个漂亮的五角星!

提示:你也可以试着改变五角星的颜色和大小哦~

import turtleturtle.color('red')  # 画笔颜色和填充颜色都设为红色
turtle.hideturtle()turtle.begin_fill()
for i in range(5):turtle.forward(100)turtle.right(180 - 36)
turtle.end_fill()
 

移动五角星

我们现在已经成功画出一颗五角星啦!(*^▽^*)

你可能已经发现了,这颗五角星有些“歪”,不在画板的正中间。如果我们脑补出坐标系的话,我们的五角星处于的位置其实是下面这样的:

 

因此,我们需要将我们的五角星先左移再上移,让五角星处于坐标系的中间,就像下面这样:

我们做不到直接移动五角星,但我们可以移动画笔的初始位置。只要将画笔的初始位置往左上方移动一点,这样我们的五角星就处于坐标系的最中间了。上图中画笔的初始位置在坐标系中大概是 (-50 ,20),我们可以调用 turtle.goto(-50, 20) 来移动画笔的位置。第一个参数是 x 轴的坐标,第二个参数是 y 轴的坐标。

但直接移动画笔位置是有问题的,因为我们的画笔一直处于落下的状态,移动的过程中也会画出一条直线。我们可以调用 turtle.penup() 将画笔抬起,这样移动的过程中就不会画线。等需要时再调用 turtle.pendown() 将画笔落下开始绘图。

所以,将边长为 100 像素的五角星移动坐标系中央的完整代码如下: 

import turtleturtle.color('red')
turtle.hideturtle()
turtle.penup()
turtle.goto(-50, 20)
turtle.pendown()turtle.begin_fill()
for i in range(5):turtle.forward(100)turtle.right(144)
turtle.end_fill()
 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

现代X86汇编-C和ASM混合编程举例

端午假期安装好了vs c2022,并写了个简单的汇编代码,证明MASM真的可以运行。今天需要搞一个实实在在的C和ASM混合编程的例子,因为用纯汇编的求伯君写WPS的时代一去不复返了。个别关键函数用汇编,充分发挥CPU的特色功能,偶尔还是需要…

关于RDMA传输的基本流量控制

Basic flow control for RDMA transfers | The Geek in the Corner (wordpress.com) 名词解释 IB : InfiniBand的缩写,指的就是InfiniBand技术。 MAD : Management Datagram的缩写。MAD是InfiniBand架构中用于设备管理和配置的一种特殊消息…

用数据说话,效果好上一万倍,不是空口说白话的“好很多”

作为一名大数据开发者,我深知数据的有很大的魔力(我这句话就没用数据,听上去很无力)。数据不仅仅是数字和图表,它还能赋予我们强大的说服力和权威感。让我给你详细讲讲数据如何让理论插上翅膀。 目录 数据的“靠谱”…

关于dwarf 中 DW_AT_data_member_location 的理解

1、用python elftool解析结构体的时候,成员偏移量存在DW_AT_data_member_location字段解析;此字段是可变长的(uleb128编码); 第一个字节是操作码 后续是偏移量 uleb128编码,正如其名,是小端结尾…

【权威出版/投稿优惠】2024年智慧城市与信息化教育国际会议(SCIE 2024)

2024 International Conference on Smart Cities and Information Education 2024年智慧城市与信息化教育国际会议 【会议信息】 会议简称:SCIE 2024 大会时间:点击查看 大会地点:中国北京 会议官网:www.iacscie.com 会议邮箱&am…

BIO、NIO编程与直接内存、零拷贝

Socket Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口,其实就是一个门面模式。 本质上就是操作系统提供的一系列的API 网络通信编程基本常识 服务端、客户端、通信编程关注的三件事 连接(客户端连接服务器,服务…

Python自动化

python操作excel # 安装第三个库 cmd -> pip install xlrb 出现success即安装成功 # 导入库函数 import xlrb # 打开的文件保存为excel文档对象 xlsx xlrb.open_workbook("文件位置") # C:\Users\Adminstator\Desktop\学生版.xlsx # 操作工作簿里的工作表 # 1.…

提升你的编程体验:自定义 PyCharm 背景图片

首先,打开 PyCharm 的设置菜单,点击菜单栏中的 File > Settings 来访问设置,也可以通过快捷键 CtrlAItS 打开设置。 然后点击Appearance & Behavior > Appearance。 找到Background image...左键双击进入。 Image:传入自己需要设置…

Golang的GC

目录 介绍GC 概要 什么是根对象 三色标记法 什么情况下三色标记法会失效 屏障机制 “强-弱” 三色不变式 插入屏障 (强三色) 删除屏障(弱三色) Go 的混合写屏障机制 混合写屏障规则 介绍GC 概要 作用范围:只回收堆内存,不回收栈内存&#xf…

list容器的基本使用

目录 前言一,list的介绍二,list的基本使用2.1 list的构造2.2 list迭代器的使用2.3 list的头插,头删,尾插和尾删2.4 list的插入和删除2.5 list 的 resize/swap/clear 前言 list中的接口比较多,与string和vector类似&am…

【Pytorch】一文向您详细介绍 torch.nn.DataParallel() 的作用和用法

【Pytorch】一文向您详细介绍 torch.nn.DataParallel() 的作用和用法 下滑查看解决方法 🌈 欢迎莅临我的个人主页 👈这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地!🎇 🎓 博主简介:985高…

Mysql学习(九)——存储引擎

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 七、存储引擎7.1 MySQL体系结构7.2 存储引擎简介7.3 存储引擎特点7.4 存储引擎选择7.5 总结 七、存储引擎 7.1 MySQL体系结构 连接层:最上层是一些客户…

SpringBoot之请求映射原理

前言 我们发出的请求,SpringMVC是如何精准定位到那个Controller以及具体方法?其实这都是 HandlerMapping 发挥的作用,这篇博文我们以 RequestMappingHandlerMapping 为例并结合源码一步步进行分析。 定义HandlerMapping 默认 HandlerMappi…

Java 反射机制 -- Java 语言反射的概述、核心类与高级应用

大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 010 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进一步完善自己对整个 Java 技术体系来充实自…

通用大模型VS垂直大模型,你更青睐哪一方?

这里写目录标题 一、通用大模型简介二、垂直大模型简介三、通用大模型与垂直大模型的比较四、如何选择适合的模型五、通用大模型和垂直大模型的应用场景六、总结 近年来,随着人工智能技术的飞速发展,大模型的应用越来越广泛。无论是自然语言处理、计算机…

STL-常用容器

3.1.1. string基本概念 本质: string是C风格的字符串,char*是C语言风格的字符串string本质上是一个类 string和char*的区别: char*是一个指针string是一个类,类内部封装并负责管理char*,是一个char*型的容器 特点&a…

[Vue3:组件通信)子组件props接收和watch监听,emit发送父组件 (添加修改设置成绩,添加、删除选课记录)

文章目录 一:系统功能:设置成绩(添加或修改)交互逻辑:涉及页面 Page02.vue,ModalEdit.vue主页面Page.vue注入子页面,使用子页面标签属性主页面对子页面做通信,子页面ModalEdit接收参…

蓝卓为中小制造企业注入数字化转型活力

随着劳动力成本上升,原材料价格上涨,企业生产成本逐年增加,市场竞争越来越激烈,传统的中小制造企业面临着巨大的压力。 通过数字化转型应对环境的变化已成为行业共识,在数字化的进程中,中小企业首要考虑生存问题,不能…

用python脚本转换图片分辨率

一、使用说明 确定已经安装python,且版本3.6以上,可以用下面指令查看python版本:python --version 配置环境,第一次使用先配置环境,后面不需要 把要转换的图片放到"img"文件夹下 转换,结果保存…

Git代码冲突原理与三路合并算法

Git代码冲突原理 Git合并文件是以行为单位进行一行一行合并的,但是有些时候并不是两行内容不一样Git就会报冲突,这是因为Git会帮助我们进行分析得出哪个结果是我们所期望的最终结果。而这个分析依据就是三路合并算法。当然,三路合并算法并不…