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 turtle

turtle.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 turtle

turtle.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 turtle

turtle.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 turtle

turtle.color('red')
turtle.hideturtle()

turtle.begin_fill()  # 开始填充
for i in range(5):
  turtle.forward(100)
  turtle.right(144)
turtle.end_fill()  # 结束填充

编程练习

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

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

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

import turtle

turtle.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 turtle

turtle.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()
 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Attention与轻量级ResNet融合,低资源消耗下实现效率和性能完美平衡

注意力机制通过让模型关注图像关键区域提升了识别精度,而轻量级残差网络通过减少参数和计算量,实现了在低资源消耗下的优秀性能。 结合注意力机制与轻量级残差网络,既能让模型能够更高效地关注输入数据中的关键信息,提升模型处理…

vs调试时无法找到文件-chromium源码编译

一直跟着教程走结果报错了,找了半天的教程无法解决,于是乎只好重来,因为这个是属于项目调试,报错了可以重新编译项目就好。在重新做的过程中发现路径写错了

人工智能的等价形式

经典的人工智能,采用“梯度下降法”,运算量很大,约是esp2。其中e是epoch,训练的周期数;s是sample,训练样本的数量;p是parameter,参数的数量。 人工智能有等价形式,它不需…

DPI简析

DPI简析 一、DPI与PPI二、硬件设备的DPI2.1打印机DPI2.2显示器DPI2.2.1显示器DPI计算2.2.2显示器分辨率与系统分辨率2.2.3常见分辨率 2.3鼠标DPI 三、图片DPI3.1图片DPI与打印尺寸3.1.1图片打印尺寸计算3.1.2常用的照片尺寸及DPI 3.2图片DPI与屏幕显示3.3修改图片DPI 参考文档 …

Windos10上Podman安装运行mysql8

记录以下在windows10系统上Podman v5.1.1安装MySQL8全过程。 目录 一、拉取mysql8镜像二、创建宿主目录三、创建 my.cnf文件四、创建Mysql8容器五、windows上Podman安装运行mysql8失败问题描述 解决办法① 通过PowerShell进入wsl② 修改wsl系统配置③ 重启wsl,Podma…

3个月搞定计算机二级C语言!高效刷题系列进行中

文章目录 前言备考计算机二级C语言为什么考二级C语言?刷题总结后发布系列文章后记免责声明 前言 大家好,我是梁国庆。 计算机二级应该是每一位大学生的必修课,相信很多同学的大学flag中都会有它的身影。 我在大学里也不止一次的想要考计算…

【运维知识大神篇】运维界的超神器Kubernetes教程14(RBAC三种认证方式详解:基于用户+基于用户组+基于服务账号)

本篇文章继续给大家介绍Kubernetes,内容依旧烧脑,不过内容也已经过了一大半了,如果你把我Kubernetes前面的教程都看懂了的话,那么你已经很厉害了,坚持下去!本篇文章主要介绍RBAC的三种认证方式,…

Python使用tkinter库设置背景图片、label显示位置和label设置显示图片

tkinter 设置背景图片 label显示位置 label设置显示图片 from tkinter import * import tkinter as tk from PIL import ImageTk from PIL import Imagedef get_img(filename, width, height):im Image.open(filename).resize((width, height))im ImageTk.PhotoImage(im)…

Java的集合框架总结

Map接口和Collection接口是所有集合框架的父接口: Collection接口的子接口包括:Set接口和List接口 Map接口的实现类主要有:HashMap、TreeMap、Hashtable、ConcurrentHashMap以及Properties等 Set接口的实现类主要有:HashSet、Tr…

【CH32V305FBP6】USBD HS 描述符修改

文章目录 前言设备描述符完整描述符配置描述符CDC 描述符接口关联描述符接口描述符功能描述符端点描述符接口描述符端点描述符 HID 描述符接口描述符 新增一个 HID 设备 前言 USB HS 复合设备,CDCHID 功能:串口、DAP、CAN-HID、RS485 设备描述符 htt…

远程抄表系统方案

一、远程抄表系统简述 远程抄表系统,是一种智能化的自动化数据收集技术性,主要运用于电力工程、供水公司、天然气等公共服务行业,完成对消费者表计数据的远程、即时、智能采集。这类系统不但降低了成本,降低了人力抄表错误&#…

手部出现这4种症状,可能是糖尿病先兆!务必及时监测血糖

糖尿病来袭,手部或先知!出现这 4 种症状,务必尽快监测血糖 第一,手指麻木感明显,当持续性的高血糖损害手部血管与神经末梢时,便会导致手指产生麻木以及刺痛之感。而且随着血糖不断升高,受损的血…

Soildworks学习笔记(一)

1.如何添加M3,M4等螺丝孔: 有时候异形孔向导显示灰色是因为没有退出草图选项卡,选择异形孔向导就可以进行异形孔的设定和放置: solidwork放置螺丝孔以及显示螺纹的问题_.16-m3 solidwork-CSDN博客 2.如何修剪线条: 如何倒圆角或…

Hack The Box-Blurry

总体思路 CVE-2024-24590->修改脚本/劫持python库 信息收集&端口利用 nmap -sSVC blurry.htbStarting Nmap 7.94SVN ( https://nmap.org ) at 2024-06-10 21:40 EDT Nmap scan report for app.blurry.htb (10.10.11.19) Host is up (0.20s latency).PORT STATE S…

网络仿真方法综述

目录 1. 引言 2.仿真器介绍 2.1 NS-2 2.2 NS-3 2.3 OPNET 2.4 GNS3 3.仿真对比 4.结论 参考文献 1. 引言 网络仿真是指使用计算机模拟网络系统的行为和性能的过程。在网络仿真中,可以建立一个虚拟的网络环境,并通过模拟各种网络设备、协议和应用程…

Java 的循环

Java 有三种循环&#xff1a;for&#xff0c;while&#xff0c;do while。 for 基本语法&#xff1a; for (循环变量初始化; 循环条件; 循环变量迭代){循环语句; }程序示例&#xff1a; public static void main(String[] args) {for (int i 0, j 0; i < 3; i, j--) {…

大神出新品,吴恩达开源机器翻译智能体项目

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学。 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 合集&#x…

Clion控制台打印中文乱码

第一步 第二步 第三步 ctrlaltshift/ 把run.processes,with.pty

教育小程序开发:技术实现与实践案例

随着信息技术的不断进步&#xff0c;教育小程序在教育领域的应用越来越广泛。教育小程序开发不仅可以提高教学效率&#xff0c;还能够提供个性化的学习体验。本文将以技术代码为例&#xff0c;详细介绍教育小程序开发的关键技术和实践案例&#xff0c;帮助开发者更好地理解和实…

小公司要求真高

大家好&#xff0c;我是白露啊。 最近看到一个爽文帖&#xff0c;标题就是——“小公司要求真高”。 事情是这样的&#xff0c;一家的小公司在拿到简历之后&#xff0c;HR直接对楼主说&#xff1a;“你不合适&#xff0c;简历不行。” 言外之意就是嫌弃简历单薄&#xff0c;看…