当前位置: 首页 > news >正文

打印菱形-第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。

相关文章:

  • 图片转换成pdf格式的软件ABBYY16
  • elasticsearch Connection reset by peer如何处理
  • python爬虫中 HTTP 到 HTTPS 的自动转换
  • colab notebook导出为PDF
  • 利用企业被执行人信息查询API保障商业交易安全
  • 5、Qt:项目中包含多个子项目(.pro)/子模块(.pri)
  • Linux:docker容器操作(4)
  • [网络] 5. TCP 链接的建立与释放~汇总
  • 怎样解决微信上传头像失败的问题?照片尺寸修改方法分享
  • 王者荣耀小游戏
  • 4:kotlin 方法(Functions)
  • 实现简单的操作服务器和客户端(下)
  • SpringBoot_websocket实战
  • 【ArcGIS Pro微课1000例】0035:栅格影像拼接(dem高程数据)
  • VMware 系列:vSphere Client安装配置常见问题及解决方案
  • 10个确保微服务与容器安全的最佳实践
  • download使用浅析
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • Java 最常见的 200+ 面试题:面试必备
  • Java,console输出实时的转向GUI textbox
  • JavaScript 奇技淫巧
  • js
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 基于Android乐音识别(2)
  • 聊聊directory traversal attack
  • 前端面试之闭包
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 译自由幺半群
  • 栈实现走出迷宫(C++)
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 终端用户监控:真实用户监控还是模拟监控?
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • ​你们这样子,耽误我的工作进度怎么办?
  • ​用户画像从0到100的构建思路
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • #HarmonyOS:基础语法
  • #pragma once与条件编译
  • #QT项目实战(天气预报)
  • #数学建模# 线性规划问题的Matlab求解
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • $(selector).each()和$.each()的区别
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (Oracle)SQL优化技巧(一):分页查询
  • (附源码)php投票系统 毕业设计 121500
  • (论文阅读11/100)Fast R-CNN
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (转)Sql Server 保留几位小数的两种做法
  • ***详解账号泄露:全球约1亿用户已泄露
  • .net framework4与其client profile版本的区别
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .Net的C#语言取月份数值对应的MonthName值
  • .net知识和学习方法系列(二十一)CLR-枚举
  • /etc/motd and /etc/issue
  • @angular/cli项目构建--Dynamic.Form