turtle绘制分形树-第10届蓝桥杯省赛Python真题精选

[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第5讲。

turtle绘制分形树,本题是2019年3月24日举行的第10届蓝桥杯青少组Python编程第5题,题目要求使用turtle绘制二叉树和分形树丛。

先来看看题目的要求吧。

一.题目说明

1

题目说明 

编程实现:

分形树

步骤 1:

利用 turtle 画出如本题图-1所示的分形树。

具体要求: 

1) 树木主干向上生长;

2) 分形层数为4,二叉树; 

3) 第一层树枝长度为60,逐层减6; 

4) 左右树枝的倾斜角度不限,最终效果与图-1 所示大致相同即可。 

5) 必须能看出绘图过程。

图片

将程序命名为“lq00501”。

评判标准:

  • 10分:能够画出大致如图中的第一层树枝;

  • 30分:能够画出大致如图中的两层以上的树枝,且为二叉树;

  • 50分:完全符合题意,即:向上生长,二叉树,层数为4,树枝长度每层递减,能看出绘图过程。

步骤 2:

一.修改步骤1中生成分形树的方法

1) 分形层数改为 4~6 之间的随机数; 

2) 第一层树枝长改为 30~60 之间的随机数;

二.绘制分形树丛 

1) 在 800X600 的屏幕中绘制分形树丛; 

2) 树木数量为 50 棵; 

3) 每棵分形树的树根位置为屏幕范围内随机坐标点,树枝允许伸出屏幕窗口外; 

4) 以屏幕中心垂直线为分界,位于屏幕左侧的树木向左倾斜,位于屏幕右侧的树木向右倾斜; 

5) 绘制过程瞬间完成(即看不到绘画过程)。

整体绘制样例如本题图-2(下面两张图)所示。

图片

图片

将程序命名为“lq00502”。

评判标准:

  • 0 分:步骤 1 没有得到满分;

  • 10 分:能在画布中画出 50 颗随机位置的树木,即使朝向相同、层数固定;

  • 30 分:在 10 分标准的基础上,能画出层数随机、树枝长短随机的分形树;

  • 50 分:完全符合题意,即在 30 分标准的基础上,能画出符合题意要求朝向倾斜的分形树,且绘画过程瞬间完成(即看不到绘画过程)。

二.思路分析

这是一道海龟画图的题目,涉及到的知识点主要包括turtle的灵活运用以及递归算法。

根据题目的要求和描述,采取逐步分解的思维,我们可以将本题分成如下四步:

  • 绘制层数为1的二叉树

  • 绘制层数为4的二叉树

  • 层数和树枝长度随机

  • 绘制分形树丛

首先来看第一步,这一步最简单,只需要绘制两个树枝即可,如图所示:

图片

绘制方法也比较简单,需要注意的是,小海龟的初始方向向上,在绘制完毕后,小海龟必须恢复到原始状态,包括位置和方向。

对应的代码大致如下:

图片

接下来我们考虑第二步,绘制层数为4的二叉树。聪明的你应该发现了这里面的规律,每一棵独立的二叉树的画法都是一样的。

所不同的只是位置和大小,这不就是典型的递归吗。

图片

因此,我们可以定义一个方递归函数,其参数为层数和树枝长度,然后分别在两棵子树的顶端调用自己,调用时需要改变层数和长度。

对于很多同学来说,递归不太好理解,其实你只需记住两点:

1). 在什么时候需要调用递归函数;

2). 调用时参数应该如何变化;

其它的交给递归函数就好了,它会帮我们完成具体的绘制过程的。

第三步相对比较简单,只需生成两个随机数,作为参数进行调用即可。

第四步,绘制分形树丛,这是本题的难点。仔细观察绘制样例,可以发现树丛中的树分为两种,一种是向左倾斜的,一种是向右倾斜的。

而前面绘制的二叉树是对称的,因此需要在此基础上进行调整,其实只需要将角度做一个微调就可以了。

由于有两种不同的倾斜方向,可以定义两个递归函数,分别对应两种不同的二叉树。

思路有了,接下来,我们就进入具体的编程实现环节。

三.编程实现

根据上面的思路分析,我们分4步来编写代码:

  • 定义递归函数

  • 绘制4层二叉树

  • 随机层数和长度

  • 绘制分形树丛

1. 定义递归函数

根据上面的思路分析,定义递归函数tree()如下:

图片

每一步都有详细注释,这里就不再赘述了,强调一点,递推函数一定要有边界条件,也就是出口,本例中的n == 0就是边界条件。如果没有边界条件,那么就会陷入死循环。

2. 绘制4层二叉树

使用组合函数,相对就简单多了,代码如下:

图片

代码比较简单,需要强调的是,关于小海龟的方向,有两种模式,分别是标准模式和logo模式,如图:

图片

turtle默认使用的是标准模式,在该模式下,默认方向是东(向右)。如果需要小海龟向上,则需要使用seth(90)函数设置。

这样一来,4层结构的二叉树就绘制好了,可以按照题目要求保存为lq00501.py了。

3. 随机层数和长度

这一步,相对比较简单,需要导入随机库,生成两个随机数,分别表示层数和树枝长度,然后调用函数即可,代码如下:

图片

4. 绘制分形树丛

根据前面的思路分析,需要定义两个函数,分别实现两边倾斜的二叉树。

先定义左边倾斜的二叉树,代码如下;

图片

其次是右边倾斜的二叉树,代码如下:

图片

两段代码基本一样,唯一不同的是方向,一个朝左倾斜,一个朝右倾斜。

以左二叉树为例,先左转30度,绘制左边的树,然后右转10度,绘制右边的树,再退回到起点之后再右转20度,确保恢复到初始状态。

有了这两个函数,接下来就可以绘制树丛了,一共是50棵,需要用到循环,同时使用随机数生成随机坐标,再根据坐标,绘制相应的二叉树即可。

对应的代码如下:

图片

简要说明两点:

1). 题目要求瞬间完成,此时就不能speed()方法了,需要使用t.tracer(0)和t.update()配合使用;

2). 移动小海龟时,需要抬笔,避免多余的直线;

运行程序,执行结果如下:

图片

按照题目要求, 将第3步和第4步的代码保存为lq00502就可以了。

怎么样,效果还不错吧, 至此,整个程序就全部完成了。

四.总结与思考

本题是中级组编程部分第5题,分数为100分,代码在50行左右,涉及到的知识点包括:

  • 循环语句,主要是for...in循环;

  • Turtle的灵活运用;

  • 函数的定义及使用;

  • 随机数的使用;

  • 坐标知识;

  • 递归算法;

题目难度较大,主要体现在两个方面,一是绘制多层的二叉树,二是绘制分形树丛。提到二叉树,就离不开递归算法,递归算法的特点就是代码比较简洁,但是理解起来有些困难。

关于递归,超平老师后面会出专题来进行详细讲解,这里就不再单独说了,先学会简单的应用就可以了。

超平老师给你留一个思考题,除了本题给出的树的效果,还有各种不同的效果,比如:

图片

你知道该怎么绘制吗,赶紧动手试试吧。

你还有什么好的想法和创意吗,也非常欢迎和超平老师分享探讨。

如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香😄

需要源码的,可以移步至“超平的编程课”gzh。

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

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

相关文章

Sui发布RPC2.0 Beta,拥抱GraphQL并计划弃用JSON-RPC

为了解决现有RPC存在的许多已知问题,Sui正在准备推出一个基于GraphQL的新RPC服务,名为Sui RPC 2.0。GraphQL是一种开源数据查询和操作语言,旨在简化需要复杂数据查询的API和服务。 用户目前可以访问Sui主网和测试网网络的Beta版本的只读快照…

基于侏儒猫鼬算法的无人机航迹规划-附代码

基于侏儒猫鼬算法的无人机航迹规划 文章目录 基于侏儒猫鼬算法的无人机航迹规划1.侏儒猫鼬搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用侏儒猫鼬算法来优化无人机航迹规划。 …

2024年人工智能安全发展十大预测

上周三,包括英国、美国和中国在内的近30个国家(以及欧盟)在人工智能安全峰会上达成首个全球性人工智能安全协议,并发布了《人工智能安全宣言》,这标志着人工智能正式进入安全发展的强监管时代。 峰会期间,…

网络爬虫的实战项目:使用JavaScript和Axios爬取Reddit视频并进行数据分析

概述 网络爬虫是一种程序或脚本,用于自动从网页中提取数据。网络爬虫的应用场景非常广泛,例如搜索引擎、数据挖掘、舆情分析等。本文将介绍如何使用JavaScript和Axios这两个工具,实现一个网络爬虫的实战项目,即从Reddit这个社交媒…

Spring boot集成sentinel限流服务

Sentinel集成文档 Sentinel控制台 Sentinel本身不支持持久化,项目通过下载源码改造后,将规则配置持久化进nacos中,sentinel重启后,配置不会丢失。 架构图: 改造步骤: 接着我们就要改造Sentinel的源码。…

【蓝桥杯省赛真题41】Scratch电脑开关机 蓝桥杯少儿编程scratch图形化编程 蓝桥杯省赛真题讲解

目录 scratch电脑开关机 一、题目要求 编程实现 二、案例分析 1、角色分析

【数据开发】大数据平台架构,Hive / THive介绍

1、大数据引擎 大数据引擎是用于处理大规模数据的软件系统, 常用的大数据引擎包括Hadoop、Spark、Hive、Pig、Flink、Storm等。 其中,Hive是一种基于Hadoop的数据仓库工具,可以将结构化的数据映射到Hadoop的分布式文件系统上,并提…

✔ ★【备战实习(面经+项目+算法)】 11.6 学习

✔ ★【备战实习(面经项目算法)】 坚持完成每天必做如何找到好工作1. 科学的学习方法(专注!效率!记忆!心流!)2. 每天认真完成必做项,踏实学习技术 认真完成每天必做&…

【Vue.js】Vue3全局配置Axios并解决跨域请求问题

系列文章目录 文章目录 系列文章目录背景一、部署Axios1. npm 安装 axios2. 创建 request.js,创建axios实例3. 在main.js中全局注册axios4. 在页面中使用axios 二、后端解决跨域请求问题方法一 解决单Contoller跨域访问方法二 全局解决跨域问题 背景 对于前后端分离…

8 ICMP与ping

1、ICMP 协议的格式 一般在网络不同的时候,我们首先想到的是ping 那你知道 ping 是如何工作的吗? 1.ping 是基于 ICMP 协议工作的。 2.ICMP全称Internet Control Message Protocol,就是互联网控制报文协议。这里的关键在于"控制"…

Ubuntu 创建用户

在ubuntu系统中创建用户,是最基本的操作。与centos7相比,有较大不同。 我们通过案例介绍,讨论用户的创建。 我们知道,在linux中,有三类用户:超级管理员 root 具有完全权限;系统用户 bin sys a…

STM32 GPIO 描述

一、GPIO功能描述 每个GPIO端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH) ,两个32位数据寄存器 (GPIOx_IDR和GPIOx_ODR) ,一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR…

基于Springboot 智能公交站台系统-计算机毕设 附源码 37261

Springboot 智能公交站台系统 目 录 摘 要 1 绪论 1.1 研究背景 1.2研究意义 1.3相关技术介绍 1.4论文结构与章节安排 2 智能公交站台系统需求分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 操作可行性分析 2.1.4 法律可行性分析 2.2 系…

分布式单元化

一 分布式单元化 1.1 两地三中心 顾名思义,两地指的是两个城市:同城,异地。三中心指的是三个数据中心:生产中心、同城容灾中心、异地容灾中心。 在同一个城市或者临近的城市建设两个相同的系统,双中心具备相当的业…

分享99个节日庆典PPT,总有一款适合您

分享99个节日庆典PPT,总有一款适合您 PPT下载链接:https://pan.baidu.com/s/16tBTcXRc7aGU1rQkcVZeOA?pwd8888 提取码:8888 Python采集代码下载链接:采集代码.zip - 蓝奏云 学习知识费力气,收集整理更不易。知识…

C语言运行代码示例

这是一个基本的 C 爬虫程序&#xff0c;使用了 C11 版本。这个程序使用了 C11 的标准库&#xff0c;包括了网络编程库&#xff08;<net/http>&#xff09;&#xff0c;字符串处理库&#xff08;<string>&#xff09;和文件操作库&#xff08;<fstream>&#…

平面扫描(Plane-sweeping)深度体会

先看文章 三维重建之平面扫描算法&#xff08;Plane-sweeping&#xff09;_plane sweeping_小玄玄的博客-CSDN博客 Plane Sweeping | 平面扫描 - 知乎 (zhihu.com) 注意平面Dm,这是其中一个平面&#xff0c;平面上有一个M点&#xff0c;这个点也再物体上。所以会被摄像机看到…

计算机编程软件编程基础知识,中文编程工具下载分享

计算机编程软件编程基础知识&#xff0c;中文编程工具下载分享 给大家分享一款中文编程工具&#xff0c;零基础轻松学编程&#xff0c;不需英语基础&#xff0c;编程工具可下载。 这款工具不但可以连接部分硬件&#xff0c;而且可以开发大型的软件&#xff0c;象如图这个实例…

猫头虎分享从Python到JavaScript传参数:多面手的数据传递术

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

[wp]NewStarCTF 2023 WEEK5|WEB

前言:比赛是结束了&#xff0c;但我的学习还未结束&#xff0c;看看自己能复习几道题吧&#xff0c;第四周实在太难 Final 考点&#xff1a; ThinkPHP 5.0.23 RCE一句话木马上传SUID提权&#xff08;find&#xff09; 解题: 首先页面就给了ThinkPHP V5&#xff0c; 那无非考…