澄城县城乡建设局网站,淘宝网店怎么注册开店,wordpress分类标题自定义,wordpress+仿简书[导读]#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后#xff0c;受到了广大老师和家长的好评#xff0c;非常感谢各位的认可和厚爱。作为回馈#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》#xff0c;这是解读系列的第9讲。
打印菱形#xff…
[导读]超平老师的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结束但不包括stopstep步长默认为1。
所以在倒序循环的时候需要将步数设置为负数同时要注意start和stop的值确保临界值正确无误。
当输入*和11效果如下 当输入#和9时效果如下 当输入$和13时效果如下 至此整个程序就全部完成了你也可以输入不同的符号和数字打印各种菱形效果。
四.思考与总结
本题的分数为50分代码在10行左右涉及到的知识点包括 输入处理主要是类型转换 循环语句主要是for...in循环 range()函数的特点及灵活运用 字符串运算包括*运算符和连接运算
题目难度一般考查的都是基础知识点难点在于如何找到菱形图案的规律并进行简化。
对于基础知识点千万不可忽略尤其是一些好用的编程技巧。比如本题中的整除运算符//、字符串重复运算符*、字符串连接运算符以及range()函数的细节灵活运用这些小技巧可以极大地提升编程效率。
寻找菱形图案的规律对大部分同学来说难度不大关键在于如何将复杂的问题进行拆分变成简单问题。
你还有什么好的想法和创意吗也非常欢迎和超平老师分享探讨。
如果你觉得文章对你有帮助别忘了点赞和转发予人玫瑰手有余香
需要源码的可以移步至“超平的编程课”gzh。