[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第4讲。
Turtle绘制五角星,本题是2019年3月24日举行的第10届蓝桥杯青少组Python编程第4题,题目要求使用turtle在画布上画出5个随机大小的五角星。
先来看看题目的要求吧。
一.题目说明
编程实现:
在Turtle画布上画出 5 个随机大小的五角星。
具体要求:
1) turtle 画布的大小为:宽 800 像素,高 600 像素;
2) 一共绘制5个五角星;
3) 每个五角星的在画布内的显示位置是随机的,五角星之间允许产生重叠甚至是完全覆盖,但每个五角星都要完整地显示在画布内;
4) 在程序运行过程中应明显看出绘制过程,建议绘图速度为 7;
5) 每个五角星的线段颜色为黑色,线宽为 5,边长为[10~150]之间的随机长度,并用黄色填充;
6) 提示:五角星的每个顶点的内角(锐角)为 36 度。
五角星的基本形状例如本题图-1 所示:
将程序命名为“lq004”。
评判标准:
-
10 分:至少画出了一个形状正确的五角星,不论其大小、位置、颜色和填充与否;
-
20 分:至少画出了一个形状、线段颜色、线宽正确的五角星;
-
40 分:生成了 5 个随机位置、随机大小且形状和线段颜色都正确的五角星,随机与否需多次运行来验证;
-
50 分:完全符合题意,即在 40 分标准的基础上,多次运行程序后,所有三角形都显示在画布范围内,且填充颜色也为黄色,也能明确看出绘画的过程。
02
二.思路分析
这是一道海龟画图的题目,考查的知识点主要是turtle绘图库的灵活运用,同时还涉及到循环、随机数、坐标等相关知识。
针对题目的需求,我们需要解决如下两大问题:
-
绘制五角星
-
随机位置
其中绘制五角星是本题的重难点,题目给出了一个小提示,即五角星的每个顶点的内角为36度。
这就需要灵活运算数学知识,将相应的角度都计算出来,如图所示:
从这张宝图中可以看出,转角是144度,因此只需要重复5次,每次绘制一条边,然后旋转144度即可。
为了方便,我们可以定义一个函数,用于绘制指定长度的五角星,以简化代码结构。
解决了五角星的绘制问题,接下来需要解决位置的问题,对于位置的处理,需要明确两点:
-
如何生成随机数
-
画布的坐标系
要生成随机数,可以使用randon库中的randint()方法,只需要指定范围即可。范围是多少呢,这就需要对画布坐标系非常熟悉。
默认情况下,turtle使用的standard模式,其坐标系如下所示:
题目要求画布的大小是800 x 600,即水平方向是800像素,垂直方向600像素,所以水平方向的坐标范围是[-400,400],垂直方向上的坐标范围是[-300,300]。
由于五角星的绘制是从最左边的顶点开始的,因此需要对范围进行微调,确保最大的五角星都显示在画布范围内。
思路有了,接下来,我们就进入具体的编程实现环节。
三.编程实现
根据上面的思路分析,我们分3步来编写程序
-
turtle相关设置
-
定义函数绘制五角星
-
随机位置画5个五角星
1. turtle相关设置
根据前面的思路分析,需要引入海龟库和随机库,然后做一些相关设置,代码如下:
2. 定义函数绘制五角星
定义一个函数用于绘制五角星,其参数为五角星的大小,代码如下所示:
3. 随机位置画5个五角星
使用循环,调用函数在随机位置绘制5个五角星,代码如下:
简单说明两点:
1). 在移动小乌龟的时候,需要先抬笔,避免画出多余的线段;
2). 在代码的最后,需要写上done()方法,避免画布一闪而过。
运行程序,执行结果如下:
需要注意的是,如果你使用的是mac笔记本,会出现中间的正五边形并没有填充黄色,而是白色。这是因为在mac系统中,turtle会对交线进行剔除颜色的,所以才导致这个问题。
至此,整个程序就全部完成了。
四.总结与思考
本题是中级组编程部分第4题,分数为50分,代码在20行左右,涉及到的知识点包括:
-
循环语句,重点是for...in循环;
-
turtle库的熟练使用;
-
随机数;
-
坐标;
-
函数的使用;
题目难度中等,不仅要求考生要熟练掌握turtle的各种用法,同时还考查了数学知识的灵活运用。通过题目给出的提示,结合五角星的特点,快速地计算出各个角度,并确定旋转的角度。
超平老师给你留一个思考题,本题中五角星中的5条边有相互交叉的情形,如果要实现不交叉的效果,如图所示:
你知道如何实现吗,赶紧动手试试。如果你有其它好的创意画法,也非常欢迎和超平老师分享探讨。
如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香😄
需要源码的,可以移步至“超平的编程课”gzh。