初探海龟绘图

news2024/11/24 9:14:26

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm=1001.2014.3001.5501

海龟绘图是Python内置的模块,在使用前需要导入该模块,可以使用以下几种方法导入:

l  直接使用import语句导入海龟绘图模块,代码如下:

import turtle

通过该方法导入后,需要通过模块名来使用其中的方法、属性等。

l  在导入模块时为其指定别名,代码如下:

import turtle as t

通过该方法导入后,可以通过模块别名t来使用其中的方法、属性等。

l  通过from…import语句导入海龟绘图模块的全部定义,代码如下:

from turtle import *

通过该方法导入后,可以直接使用其中的方法、属性等。

了解海龟绘图的坐标系

在学习海龟绘图之前,需要先了解海龟绘图的坐标系。海龟绘图采用的是平面坐标系,即画布(窗口)的中心为原点(0,0),横向为x轴,纵向为y轴,x轴控制水平位置,y轴控制垂直位置。例如,一个400×320的画布,对应的坐标系如图15.1所示。

图15.1  海龟绘图的坐标系

在图15.1中,绿色虚线框为画布大小。海龟活动的空间为绿色虚线框以内。即x轴的移动区间为-200~200 ;y轴的移动区间为-160~160。同数学中一样,表示海龟所在位置(即某一点)的坐标为(x, y)。

海龟绘图的三要素

采用海龟绘图有三个关键要素,即方向、位置和画笔。在进行海龟绘图时,主要就是控制这些要素来绘出我们想要的图形。下面分别进行介绍。

l  方向

在进行海龟绘图时,方向主要用于控制海龟的移动方向。主要有以下3个方法进行设置:

Ø  left()/lt()方法:让海龟左转(逆时针)指定度数。

Ø  right()/rt()方法:让海龟右转(顺时针)指定度数。

Ø  setheading()/seth()方法:设置海龟的朝向为0(东)、90(北)、180(西)或270(南)。

l  位置

在进行海龟绘图时,位置主要用于控制海龟移动的距离。主要有以下6个方法进行设置:

Ø  forward(distance) :让海龟向前移动指定距离,参数distance为有效数值。

Ø  backward(distance) :让海龟向后退指定距离,参数distance为有效数值。

Ø  goto(x,y) :让海龟移动到画布中的特定位置。即坐标(x, y)所指定的位置。

Ø  setx(x) :设置海龟的横坐标到x,纵坐标不变。

Ø  sety(y) :设置海龟的纵坐标到y,横坐标不变。

Ø  home() :海龟移至初始坐标 (0,0),并设置朝向为初始方向。

l  画笔

海龟绘图中的画笔就相当于现实生活中绘图所用的画笔。在海龟绘图中,通过画笔可以控制线条的粗细、颜色和运动的速度。关于画笔的详细介绍请参见第15.3节。

绘制第一只海龟

下面我们就来绘制第一只海龟,以此来了解海龟绘图的基本步骤。

       实例15.1   绘制一只向前爬行的海龟

  创建一个Python文件,在该文件中,首先导入turtle模块,然后通过RawTurtle类的子类Turtle(别名为Pen)创建一只小海龟并命名,再调用forward()方法向前移动200像素。代码如下:

import turtle # 导入海龟绘图模块

t_ufo = turtle.Turtle() # 创建一只小海龟,命名为t_ufo

t_ufo.forward(200) # 向前爬行200像素

turtle.done() # 海龟绘图程序的结束语句(开始主循环)

说明:在上面的代码中,第2 行代码也可以替换为:“t_ufo = turtle.Pen()”;最后一行也可以替换为“turtle.

mainloop()”。

运行程序,在打开的窗口中,可以看见一个箭头从屏幕中心的位置向右移动,并且保留一条200 像素的线,如图15.2所示。在图15.2中,并没有一只海龟,这是因为在海龟绘图的默认情况下,光标形状为箭头,可以通过海龟的shape()方法进行修改。如果想要修改为海龟形状,可以在【实例15.1】的代码中添加以下代码:

t_ufo.shape('turtle') # 设置为海龟形状

再次运行程序,将显示如图15.3所示的效果。可以看出,图15.2中的箭头变为一只小海龟。

图15.2 从屏幕中心向右画一条200 像素的线           图15.3 光标的形状变为一只小乌龟

说明:如果在屏幕上只需要有一只小海龟,那么也可以不创建海龟对象,直接使用turtle作为海龟对象即

可。例如,【实例15.1】的代码也可以修改为以下代码:

turtle.forward(100) # 向前爬行200像素

turtle.shape('turtle') # 设置为海龟形状

turtle.done() # 海龟绘图程序的结束语句(开始主循环)

另外,在15.1节中介绍导入turtle模块的几种方法时,介绍了通过from…import语句导入全部定义。通过该方法导入模块后,如果屏幕中只有一只海龟,则可以将代码简化为以下内容:

from turtle import * # 导入海龟绘图的全部定义

forward(100) # 向前爬行200像素

shape('turtle') # 设置为海龟形状

turtle.done() # 海龟绘图程序的结束语句(开始主循环)

动手试一试

任务一:让小海龟留下Z字形的足迹

本任务要求:应用海龟让一只小海龟在沙滩上留下Z字形的足迹,效果如图15.4所示。(提示:可以通过移动和旋转实现)

图15.4  让小海龟留下Z字形的足迹

任务二:绘制一个小于号“<”

本任务要求应用海龟绘制一个小于号“<”,效果如图15.5所示。(提示:可以通过移动和旋转实现)

图15.5  绘制一个小于号“<”

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

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

相关文章

深度学习21-30

1.池化层作用&#xff08;筛选、过滤、压缩&#xff09; h和w变为原来的1/2&#xff0c;64是特征图个数保持不变。 每个位置把最大的数字取出来 用滑动窗口把最大的数值拿出来&#xff0c;把44变成22 2.卷积神经网络 &#xff08;1&#xff09;conv&#xff1a;卷积进行特征…

JS(JavaScript)的复合类型详解

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

vue3前后端开发:响应式对象不能直接成为前后端数据传输的对象

如图所示&#xff1a;前端控制台打印显示数据是没问题的&#xff0c;后端却显示没有接收到相应数据&#xff0c;但是后端的确接收到了一组空数据 直接说原因&#xff1a;这种情况唯一的原因是没有按正确格式传递参数。每个人写错的格式各有不同&#xff0c;我只是说明一下我在…

大模型应用研发基础环境配置(Miniconda、Python、Jupyter Lab、Ollama等)

老牛同学之前使用的MacBook Pro电脑配置有点旧&#xff08;2015 年生产&#xff09;&#xff0c;跑大模型感觉有点吃力&#xff0c;操作起来有点卡顿&#xff0c;因此不得已捡起了尘封了快两年的MateBook Pro电脑&#xff08;老牛同学其实不太喜欢用 Windows 电脑做研发工作&am…

第三方软件连接虚拟机

第三方软件连接虚拟机 1 查看本机VM&#xff08;VMware&#xff09;虚拟机网段2 开启虚拟机系统&#xff0c;修改网卡配置3 重新打开网络并测试连通性4 打开VM虚拟机网络开关5 通过第三方软件建立连接6 可能遇到的问题 1 查看本机VM&#xff08;VMware&#xff09;虚拟机网段 子…

vite+vue3+ts项目搭建流程 (pnpm, eslint, prettier, stylint, husky,commitlint )

vitevue3ts项目搭建 项目搭建项目目录结构 项目配置自动打开项目eslint①vue3环境代码校验插件②修改.eslintrc.cjs配置文件③.eslintignore忽略文件④运行脚本 prettier①安装依赖包②.prettierrc添加规则③.prettierignore忽略文件④运行脚本 stylint①.stylelintrc.cjs配置文…

EfficientNet-V2论文阅读笔记

目录 EfficientNetV2: Smaller Models and Faster Training摘要Introduction—简介Related work—相关工作EfficientNetV2 Architecture Design—高效EfficientNetV2架构设计Understanding Training Efficiency—了解训练效率Training-Aware NAS and Scaling—训练感知NAS和缩放…

Android开发系列(九)Jetpack Compose之ConstraintLayout

ConstraintLayout是一个用于构建复杂布局的组件。它通过将子视图限制在给定的约束条件下来定位和排列视图。 使用ConstraintLayout&#xff0c;您可以通过定义视图之间的约束关系来指定它们的位置。这些约束可以是水平和垂直的对齐、边距、宽度和高度等。这允许您创建灵活而响…

win10修改远程桌面端口,Windows 10下修改远程桌面端口及服务器关闭445端口的操作指南

Windows 10下修改远程桌面端口及服务器关闭445端口的操作指南 一、修改Windows 10远程桌面端口 在Windows 10系统中&#xff0c;远程桌面连接默认使用3389端口。为了安全起见&#xff0c;建议修改此端口以减少潜在的安全风险。以下是修改远程桌面端口的步骤&#xff1a; 1. 打…

AI 编程还有前景嘛?

自从各个大厂相继出品 AI 编程助手之后&#xff0c;AI 在编程领域的发展&#xff0c;可谓是几无寸进。 相比于 AI 在多模态领域火热&#xff0c;AI 在编程领域的热度已经完全下来了。 阿七在公众号搜索了关键词「AI编程」&#xff0c;发现搜索出来的公众号寥寥无几&#xff0…

[学习笔记] 禹神:一小时快速上手Electron笔记,附代码

课程地址 禹神&#xff1a;一小时快速上手Electron&#xff0c;前端Electron开发教程_哔哩哔哩_bilibili 笔记地址 https://github.com/sui5yue6/my-electron-app 进程通信 桌面软件 跨平台的桌面应用程序 chromium nodejs native api 流程模型 main主进程 .js文件 node…

【Unity小技巧】记一个RenderTexture无法正确输出Camera视图下的Depth渲染的问题

问题 这个问题出现在使用URP管线时&#xff0c;我试图用Shader实现血条的制作&#xff0c;并用RenderTexture将视图渲染到RawImage上。 但是渲染结果出现了问题&#xff1a; 可以看到液体边缘的渲染出现了错误&#xff0c;原因不明 在StackFlow上查找后找到了类似的问题&…

嵌入式学习(Day 51:ARM指令/汇编与c语言函数相互调用)

1.Supervisor模式与SVC模式 Supervisor模式是ARM处理器的一个特权工作模式&#xff0c;允许执行特权指令和访问特权资源。SVC模式&#xff08;Supervisor Call&#xff09;是与Supervisor模式相关的一个功能或指令&#xff0c;用于从用户模式切换到Supervisor模式&#xff0c;…

MySQL报错Duplicate entry ‘0‘ for key ‘PRIMARY‘

报错现场 现象解释 因为你在插入时没有给 Customer.Id 赋值&#xff0c;MySQL 会倾向于赋值为 NULL。但是主键不能为 NULL&#xff0c;所以 MySQL 帮了你一个忙&#xff0c;将值转换为 0。这样&#xff0c;在第二次插入时就会出现冲突&#xff08;如果已经有一条记录为 0&…

Linux系统中根下的目录结构介绍

一、Linux的路径分隔符 Linux系统中使用正斜杠(/)作为路径分隔符&#xff1b;每个目录的后面都默认带有一个正斜杠&#xff08;如&#xff1a;需要进入opt目录可以分别使用【cd /opt】或【cd /opt/】&#xff09; 二、Linux根目录下各个目录结构介绍 红色标识的文件夹为Linux的…

Vue3基础使用

目录 一、创建Vue3工程 (一)、cli (二)、vite 二、常用Composition API (一)、setup函数 (二)、ref函数 (三)、reactive函数 (四)、setup注意事项 (五)、计算属性 (六)、watch (七)、watchEffect函数 (八)、生命周期 1、以配置项的形式使用生命周期钩子 2、组合式…

LeetCode 算法:将有序数组转换为二叉搜索树 c++

原题链接&#x1f517;&#xff1a;将有序数组转换为二叉搜索树 难度&#xff1a;简单⭐️ 题目 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 平衡 二叉搜索树。 示例 1&#xff1a; 输入&#xff1a;nums [-10,-3,0,5,9]…

怎么用电脑在线制作活码?快速将活码生成的操作方法

随着现在很多内容都可以通过生成二维码的方式来展示&#xff0c;所以在很多地方都会将内容生成二维码的方式让其他人通过扫码查看内容。二维码不仅能够简化用户获取内容的流程&#xff0c;还可以降低成本&#xff0c;有效提升用户体验&#xff0c;那么不同内容的二维码如何制作…

Golang笔记:使用serial包进行串口通讯

文章目录 目的使用入门总结 目的 串口是非常常用的一种电脑与设备交互的接口。这篇文章将介绍golang中相关功能的使用。 本文使用的包为 &#xff1a;go.bug.st/serial https://pkg.go.dev/go.bug.st/serial https://github.com/bugst/go-serial 另外还有一些常见的包如&…