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。

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

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

相关文章

百度上线“文心一言”付费版本,AI聊天机器人市场竞争加剧

原创 | 文 BFT机器人 百度不愧是我国AI技术领域的先行者,每年致力于人工智能领域取得技术产品的突破和创新。据爆料称,百度的文心一言有突破了新境界,开创了文心大模型4.0会员版本。从线上的to C产品到试水商业化,百度都是争先走…

python爬取Web of science论文信息

一、python爬取WOS总体思路 (一)拟实现功能描述 wos里面,爬取论文的名称,作者名称,作者单位,引用数量 要求:英文论文、期刊无论好坏 检索关键词:zhejiang academy of agricultural sciences、 xianghu lab…

Android 多点触控

三种类型 :接力型 /配合型 /单独型 单点触控 package com.example.myapplication.viewimport android.content.Context import android.graphics.Canvas import android.graphics.Paint import android.util.AttributeSet import android.view.MotionEvent import android.vi…

优思学院|诺桑比亚大学精益六西格玛大会 2023

国际精益六西格玛研究所(ILSSI)今年将赞助诺桑比亚大学(Northumbria University)的第九届国际精益六西格玛大会,大会将于2023年11月13日和14日在英国新卡斯尔市,诺桑比亚大学举行。 这次大会的核心主题是&a…

埃隆·马斯克的 AI 聊天机器人 Grok 已经上线

昨天,埃隆马斯克 (Elon Musk) 通过他的公司 xAI 推出了一款名为 Grok 的新型人工智能聊天机器人。这款新的聊天机器人将通过 Twitter 更新实时获取世界知识,使其成为最新的对话 AI 系统。 Grok 的独特和基本优势在于它可以通过 𝕏 平台实时了…

四.pyqt5 登录界面和功能

一.使用qt creator 设置登录界面 主界面为之前设计的界面 from123.py 文章地址:三.listview或tableviw显示 二.导出ui文件为py文件 # from123.py 为导出 py文件 form.ui 为 qt creator创造的 ui 文件 pyuic5 -o x:\xxx\Fromlogin20230809.py form.ui三.python 显…

Nacos-2.2.2源码修改集成高斯数据库GaussDB,postresql

一 ,下载代码 Release 2.2.2 (Apr 11, 2023) alibaba/nacos GitHub 二, 执行打包 mvn -Prelease-nacos -Dmaven.test.skiptrue -Drat.skiptrue clean install -U 或 mvn -Prelease-nacos ‘-Dmaven.test.skiptrue’ ‘-Drat.skiptrue’ clean instal…

网络运维Day05

文章目录 实验环境用户与组概述用户账号创建查看用户-查创建用户-增修改用户属性-改删除用户-删 用户密码管理交互式修改密码非交互式修改密码 用户初始配置文件基本权限和归属基本权限的类别权限适用对象(归属)查看权限 修改权限设置基本权限如何判断用户对某目录所具备怎样的…

研发管理用什么软件?

研发管理用什么软件 研发管理用的软件有:1、JIRA;2、Confluence;3、彩虹PDM软件。彩虹PDM软件 是由南宁市二零二五科技有限公司 自主研发,为用户提供“产品全生命周期管理解决方案”。产品结构管理、BOD管理、零部件管理、工艺管理…

SS928开发板 开发记录三: nfs 挂载

1.创建nfs文件 1.安装nfs sudo apt-get install nfs-kernel-server 2.创建文件 sudo mkdir /home/nfsroot 3.给权限 sudo chmod 777 nfsroot 4.设置 vim /etc/exports 最后一行加入 /nfsroot *(rw,sync,no_root_squash)5. 重启nfs sudo service nfs-kernel-server r…

Redis高级数据类型-HyperLogLogBitmap以及使用两种数据类型完成网站数据统计

网站数据统计 定义相关的Redis Key /*** 单日UV*/public static String getUVKey(String date) {return PREFIX_UVSPLITdate;}/*** 记录区间UV* param startData 开始日期* param endDate 结束日期* return*/public static String getUVkey(String startData,String endDate){r…

SpringBoot+AOP+自定义注解,优雅实现日志记录

文章目录 前言准备阶段1、数据库日志表2、自定义注解编写3、AOP切面类编写4、业务层4.1、Service 层:4.2 Service 实现层: 5、测试 前言 首先我们看下传统记录日志的方式是什么样的: DeleteMapping("/deleteUserById/{userId}") …

ARM64 linux并发与同步之原子操作

卷2:调试与案例分析 第一章 并发与同步 画了两张简图,方便理解,如下: 针对并发源的问题,我接触的项目中都是SMP系统,目前大部分也都是SMP系统; 对于SMP系统,情况会更复杂。 □ 同…

数据可视化:动态柱状图

终于来到最后一个数据可视化的文章拿啦~~~ 在这里学习如何绘制动态柱状图 我先整个活 (๑′ᴗ‵๑)I Lᵒᵛᵉᵧₒᵤ❤ 什么是pyecharts? 答: Python的Pyecharts软件包。它是一个用于Python数据可视化和图表绘制的库,可用于制作…

音乐免费下载mp3格式+音频格式转换+剪辑音频+合并音频教程

1.在qq音乐网页版搜索想要的歌曲 qq音乐网站:https://y.qq.com/ 如果你是vip可以直接下载vip的歌曲,如果不是选择不是vip的歌曲进行第一步的操作 2.点击播放进入页面后F12拿到音频地址 然后双击src里面的音频地址复制 网页新标签打开赋值的这个链接&a…

SpringBoot-WebSocket浏览器-服务器双向通信

文章目录 WebSocket 介绍入门案例 WebSocket 介绍 WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输。 应用场景: 视…

Markdown语法教程

Markdown:一种轻量级语言,有简洁的编写方式,能够提高大家的工作效率。 一、标题 1.1 标题 标题的编写格式以#号开始,分别表示h1 ~ h6,注意:# 后面有空格! # 一级标题 ## 二级标题 ### 三级标题…

vue2.0 打包,nginx部署

1、修改这里为空 否则报错:vue is undefined 2、修改为hash,重点:打包dist文件运行,必须这样 3、安装ngnix,重点:使用node的包:httpserve,失败 4、重点:配置代理转发 前端…

2024天津理工大学中环信息学院专升本机械设计制造自动化专业考纲

2024年天津理工大学中环信息学院高职升本科《机械设计制造及其自动化》专业课考试大纲《机械设计》《机械制图》 《机械设计》考试大纲 教 材:《机械设计》(第十版),高等教育出版社,濮良贵、陈国定、吴立言主编&#…

ElementUI-tree拖拽功能与节点自定义

前言 在管理端会遇到多分类时,要求有层次展示出来,并且每个分类有额外的操作。例如:添加分类、编辑分类、删除、拖到分类等。 下面将会记录这样的一个需求实习过程。 了解需求 分类展示按层级展示分类根据特定的参数展示可以操作的按钮&a…