Turtle绘制菱形-第11届蓝桥杯选拔赛Python真题精选

导读\]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python**蓝桥杯真题解析100讲》,**这是解读系列的第16讲。 **Turtle绘制菱形,**本题是2019年12月15日举办的第11届蓝桥杯青少组Python编程选拔赛真题,题目要求使用Turtle绘制一个复合图形,中间是半径为 120 的圆,四周是边长为80的12个菱形。 先来看看题目的要求吧。 ### 一.题目说明 **提示信息:** 识别出图形中的基本形状,以基本形状为单位绘制出最终图形。绘制所示图形,中间是半径为120的圆,四周是边长为80的12个菱形。 ![图片](https://file.jishuzhan.net/article/1735555699271798786/e986159ffdcdde8279cae0a883cfaa7d.webp) **编程实现:** 使用 turtle 绘制如图中所示的图形。 1). 背景为白色,中间圆为红色轮廓线,不填充; 2). 图中菱形的长对角线延长线经过圆心(如图中虛线所示,虚线不用绘制); 3). 菱形为黑色轮廓线、黄色填充,其中锐角为60度; 4). 绘图过程中隐藏面笔,能清楚地看到图形绘制过程。 **评分标准:** 下列各评分项单独计分 ,累加评判,共计25个计分点。 * 4 分:正确绘制出一个半径为 120 的不填充、红色圆形; * 6分:正确绘制出一个边长为80、锐角为60度的黄色填充、黑色轮廓的菱形; * 9分:正确绘制出 12 个相同的菱形,且其长对角线的延长线经过圆心(图中虚线不用绘制); * 6分:绘制图形如图所示,菱形方向正确、均匀分布、画笔隐藏,且能看到绘制过程。 ### 二.思路分析 这是一道海龟画图的题目,考查的知识点主要包括Turtle的基本使用、循环和函数等。 分析效果图,我们可以将图形分成如下两个部分: * 红色圆形 * 12个菱形 对于圆形的绘制,比较简单,直接使用Turtle提供的circle()方法即可,趁这个机会,我们一起认识一下circle()方法吧。 turtle.circle(radius, extent=None, steps=None) 3个参数作用如下: * radius:指定半径的圆; * extent:表示夹角,用来决定绘制圆的一部分,默认是360; * steps:表示内切正多边形的边数,用于绘制正多边形; 有两点需要注意: 1). radius可以设置为负值, radius为正时小海龟沿逆时针方向绘制圆弧,为负数时则朝顺时针方向; 2). 圆实际是以其内切正多边形来近似表示的,其边的数量由 steps 指定。如果未指定边数则会自动确定,此时绘制的就是圆,设置steps的值,可用来快速绘制正多边形,非常的方便。 所以,绘制红色的圆,只需要使用如下代码即可: t.color("red")t.circle(120) 绘制效果如下: ![图片](https://file.jishuzhan.net/article/1735555699271798786/4941e01cd50302bcd3d16cc843be46b6.webp) 效果还不错,但是有一个小问题,就是圆没有处在中心位置,小海龟也没有回到圆心位置,不利于接下来的菱形绘制。 所以,在绘制圆形之前,需要先将圆心移到(0,-120)的位置,圆形画完后再移回到(0,0)处。 菱形的绘制是本题的难点,我们需要分两步来解决: 1). 绘制1个菱形 2). 绘制12个菱形 绘制单个菱形时,需要搞清楚旋转的角度,菱形的4个角并不完全相等,而是两两相等,其中两个锐角是60度,两个钝角为120度。 因此,绘制的使用,需要先画两条边,然后重复两次,代码如下:​​​​​​​ for i in range(2): t.forward(120) t.right(60) t.forward(120) t.right(120) 为了方便,我们可以定义一个函数用于绘制菱形,然后调用函数来绘制12个菱形。 12个菱形刚好围成一圈,如果将1个菱形当作是一条边,就相当于是绘制一个正12边形,根据之前介绍的万能公式: ![图片](https://file.jishuzhan.net/article/1735555699271798786/153d3f21eac193150dbc8b0588d0ab55.webp) 每绘制一个菱形,旋转30度即可。 这里的关键点在于绘制12个菱形时,旋转点在圆心(0,0)位置,所以我们每次都要从(0,0)开始,沿着当前方向前进120到达圆周位置,绘制一个菱形,然后再回到(0,0)位置,一定要确保回到圆形位置旋转。 思路有了,接下来,我们就进入具体的编程实现环节。 ### 三.编程实现 根据上面的思路分析,我们分3步来编写程序: * 定义函数绘制菱形 * 绘制红色圆形 * 绘制12个菱形 **1. 定义函数绘制菱形** 根据前面的思路分析,我们定义函数如下: ![图片](https://file.jishuzhan.net/article/1735555699271798786/1d18860a3cf695075cef98c01577e066.webp) 代码不难,需要强调3点: 1). 题目要求方向正确,小海龟默认面向右方(方向为0),但是正右方的菱形对角线水平向右,所以需要先左转30度,绘制完成之后需要右转30度,恢复到初始方向; 2). color()方法有两个参数,分别表示边框颜色和填充颜色,如果只给一个参数,则表示两者颜色相同,你也可以使用pencolor()和fillcolor()单独设置; 3). 必须要在绘制之前调用begin_fill(),在绘制完成后调用end_fill()。 **2. 绘制红色圆形** 这一步比较简单,重点是要调整小海龟的位置,继续编写代码如下: ![图片](https://file.jishuzhan.net/article/1735555699271798786/0d951c2a028f1dc8909e9eab49ff3734.webp) 需要注意一点,移动时需要先抬笔,移动完成后再落笔,避免画出多余的线段。 **3. 绘制12个菱形** 使用循环,调用函数绘制12个菱形,代码如下: ![图片](https://file.jishuzhan.net/article/1735555699271798786/d45e939ee914c5d41db1b77bda8c6fff.webp) 代码不难理解,强调两点: 1). 绘制菱形之前,要将小海龟移到圆周位置,绘制完后要回到中心位置,一定要先抬笔,再移动,然后落笔; 2). 注意t.right(30)的位置,一定是在回到中心点才能右转。 运行程序,效果如下: ![图片](https://file.jishuzhan.net/article/1735555699271798786/e5196389ed6f25b42a5a38cccb083253.webp) 至此,整个程序就全部完成了,效果还不错吧。 ### 四.总结与思考 本题的分数为25分,代码在30行左右,涉及到的知识点包括: * 循环语句,主要是for...in循环; * turtle的基本使用; * 函数的定义及使用; 题目难度中等,难点在于如何沿着红色的圆周绘制12个菱形。这不仅需要学生熟练掌握turtle的各种基本用法,同时还要求能够分析图形的规律,找到通用的解决方法,将问题简化,这其实就是逻辑思维能力。 在绘制多个相同图形时,一定要注意复位,也就是说绘制完一个图形之后,要确保小海龟回到初始位置,包括坐标和方向,这样才能确保后续的旋转是正确的。 你还有什么好的想法和创意吗,也非常欢迎和超平老师分享探讨。 如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香😄 需要源码的,可以移步至"超平的编程课"gzh。

相关推荐
农夫山泉2号1 小时前
【python】—conda新建python3.11的环境报错
python·conda·python3.11
ZHOU_WUYI2 小时前
Flask Docker Demo 项目指南
python·docker·flask
ErikTse_4 小时前
【官方题解】StarryCoding 入门教育赛 2 | acm | 蓝桥杯 | 新手入门
职场和发展·蓝桥杯
嗨信奥6 小时前
蓝桥杯青少 图形化编程(Scratch)每日一练——校门外的树
青少年编程·蓝桥杯
码上淘金6 小时前
【Python】Python常用控制结构详解:条件判断、遍历与循环控制
开发语言·python
Brilliant Nemo6 小时前
四、SpringMVC实战:构建高效表述层框架
开发语言·python
2301_787552877 小时前
console-chat-gpt开源程序是用于 AI Chat API 的 Python CLI
人工智能·python·gpt·开源·自动化
懵逼的小黑子7 小时前
Django 项目的 models 目录中,__init__.py 文件的作用
后端·python·django
Y3174297 小时前
Python Day23 学习
python·学习
Ai尚研修-贾莲8 小时前
Python语言在地球科学交叉领域中的应用——从数据可视化到常见数据分析方法的使用【实例操作】
python·信息可视化·数据分析·地球科学