打印菱形-第11届蓝桥杯选拔赛Python真题精选

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

**打印菱形,**本题是2019年~2020年举办的第11届蓝桥杯青少组Python编程选拔赛真题(具体日期不详),题目要求根据输入的字符和数字,打印一个菱形图形。

先来看看题目的要求吧。

一.题目说明

编程实现:

输入一个半角英文字符和一个3 ~ 19之间的奇数 , 输出由英文字符构成的菱形图形,输入的数值为菱形中间最长一行中英文符号的个数。

输入描述:

第一行,构成菱形的半角英文字符 ;

第二行,菱形中最长一行英文符号的个数。

输出描述:

由英文符号构成的菱形。

样例输入:

*

11

样例输出:

评分标准:

  • 10分:能用输入的英文字符输出菱形, 不论输出的字符数量和形状是否正确 ;

  • 30分:至少对一个随机的评判用例 ,能输出高度符合要求的形状,不要求形状完全正确;

  • 50分:完全符合题意,即对所有评判用例均 能给出正确输出。

二.思路分析

这是一道打印图案的题目,也是学习Python基础语法时常见的一类题目,考查的知识点包括循环和字符串操作。

本题的难点是如何找到菱形图形的规律,具体来说,就是给定一个行数i,就可以输出第i行的空格和英文字符。

为方便分析和理解,超平老师将题目给出的样例数据,绘制一个表格如下:

你找到这其中的规律了吗?

输入的数字是11,一共有11行字符,可以分成如下3个部分:

  • 前5行,

  • 中间行

  • 后5行

前5行,每一行的空格数量从5开始,依次递减1,分别是5、4、3、2、1;每一行的*则从1开始,依次递增2,分别是1、3、5、7、9。

中间行,即第6行,没有空格,一共有11个*。

后5行和前5行刚好相反,每一行的空格数量从1开始,依次递增1,分别是1、2、3、4、5;每一行的*则从9开始,依次递减2,分别是9、7、5、3、1。

如此一来,问题就变简单了,针对行数为11的情况,只要处理好前5行就可以。推而广之,如果是n行,则只需要处理好前(n//2)行就ok了。

在Python中,for...in循环默认是从0开始的,

for i in range(n//2)

所以,i = 0表示第一行,i = 1表示第二行,根据前面的分析,可以得出如下对应关系:

第i行空格数:n//2 - i第i行字符数:i * 2 + 1

对于中间行,只需要输出n个字符即可。

而后n//2行,只需要将前n//2行倒过来循环就可以,每一行的空格数和字符数还是遵循上面的关系。

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

三.编程实现

根据上面的思路分析,我们编写代码如下:

代码不难理解,简单说明3点:

1). 在取中间行的时候,需要使用整除,Python提供了整除运算符//,如果不记得的话,也可以先使用除法/,然后再取整,如下:

mid = int(n / 2)

2). 在Python中,*运算符用途广泛,可以用于重复指定的字符和字符串,从而避免了使用循环结构;

3). Python中的range()函数,具有虎头蛇尾的特性(包含第一个,不包含最后一个),其完整的用法如下:

range(start, stop[, step])start: 计数从start开始。默认是从0开始;stop: 计数到stop结束,但不包括stop;step:步长,默认为1。

所以,在倒序循环的时候,需要将步数设置为负数,同时要注意start和stop的值,确保临界值正确无误。

当输入*和11,效果如下:

当输入#和9时,效果如下:

当输入$和13时,效果如下:

至此,整个程序就全部完成了,你也可以输入不同的符号和数字打印各种菱形效果。

四.思考与总结

本题的分数为50分,代码在10行左右,涉及到的知识点包括:

  • 输入处理,主要是类型转换

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

  • range()函数的特点及灵活运用;

  • 字符串运算,包括*运算符和连接运算,;

题目难度一般,考查的都是基础知识点,难点在于如何找到菱形图案的规律并进行简化。

对于基础知识点,千万不可忽略,尤其是一些好用的编程技巧。比如本题中的整除运算符//、字符串重复运算符*、字符串连接运算符+以及range()函数的细节,灵活运用这些小技巧,可以极大地提升编程效率。

寻找菱形图案的规律,对大部分同学来说,难度不大,关键在于如何将复杂的问题进行拆分,变成简单问题。

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

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

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

相关推荐
千澜空3 分钟前
celery在django项目中实现并发任务和定时任务
python·django·celery·定时任务·异步任务
斯凯利.瑞恩11 分钟前
Python决策树、随机森林、朴素贝叶斯、KNN(K-最近邻居)分类分析银行拉新活动挖掘潜在贷款客户附数据代码
python·决策树·随机森林
yannan2019031332 分钟前
【算法】(Python)动态规划
python·算法·动态规划
蒙娜丽宁42 分钟前
《Python OpenCV从菜鸟到高手》——零基础进阶,开启图像处理与计算机视觉的大门!
python·opencv·计算机视觉
光芒再现dev44 分钟前
已解决,部署GPTSoVITS报错‘AsyncRequest‘ object has no attribute ‘_json_response_data‘
运维·python·gpt·语言模型·自然语言处理
好喜欢吃红柚子1 小时前
万字长文解读空间、通道注意力机制机制和超详细代码逐行分析(SE,CBAM,SGE,CA,ECA,TA)
人工智能·pytorch·python·计算机视觉·cnn
小馒头学python1 小时前
机器学习是什么?AIGC又是什么?机器学习与AIGC未来科技的双引擎
人工智能·python·机器学习
神奇夜光杯1 小时前
Python酷库之旅-第三方库Pandas(202)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
千天夜1 小时前
使用UDP协议传输视频流!(分片、缓存)
python·网络协议·udp·视频流
测试界的酸菜鱼1 小时前
Python 大数据展示屏实例
大数据·开发语言·python