统计字母数量-第11届蓝桥杯选拔赛Python真题精选

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

统计字母数量,本题是2019年~2020年举办的第11届蓝桥杯青少组Python编程选拔赛真题(具体日期不详),题目要求编写程序统计三行文字中各字母出现的次数并打印出来。

先来看看题目的要求吧。

一.题目说明

编程实现:

连续输入由英文字母组成的三行文字(每行文字不少于 10个字符,中间有空格和英文标点符号),以回车键结束一行文字的输入。

然后统计这三行文字中各字母出现的次数(不区分大小写),并以如下样例所示的方式输出各字母出现的次数(没有出现的字母不显示)。

输入描述:

三行英文文字,每行文字的输入以回车键结束。

输出描述:

1). 将输入的三行文字拼接在一起输出;

2). 换行输出文字中出现的英文字母(不区分大小写)的大写,且按字母表顺序排序、相邻字母问距相同;

3). 再换行在大写字母下方输出其在文字中出现的次数。

输人样例:

请输入第1行英文文字:I love you. my baby.

请输入第2行英文文字:You are a good boy.

请输入第3行央文文字:We are very happy with you.

输出样例:

图片

评分标准:

  • 8分:正确将三行文字拼接在一起输出;

  • 10分:正确输出一行大写英文字母(文中出现的字母),且按字母表顺席排序、间距相同:

  • 12 分:在大写字母下方输出各字母在文中出现的次数,且一一对应(不要求按字母表顺序排序)。

二.思路分析

这是一道字符串处理的题目,考查的知识点包括循环、字符串运算和字典的灵活运用。

题目要求输出两个内容,一是合并之后的字符串,二是每个字母出现的次数。

对于第一个问题,非常的简单,直接使用连接运算处理即可,这里的难点是第二个问题。

每个字母都需要统计对应的次数,如图所示:

图片

看到这种表格,你想到了什么?

相信聪明的你,已经想到了,这不就是字典吗。

图片

是的,本题需要用到字典这种数据结构,确定了数据结构,接下来就需要考虑该如何着手解决问题。

根据题目的描述,我们可以分成如下4个步骤:

  • 构造字典

  • 遍历字符串,统计字母数量

  • 过滤字典

  • 分别输出字典的键和值

首先是第一步,构造字典。

我们需要构造一个由26个大写字母构成的字典,如下:

{'A' : 0, 'B' : 0, 'C' : 0, 'D' : 0, ......}

构造的方法有两种,一种是按照上面的格式直接书写,第二种是借助ASCII码,结合chr()函数和循环来构造,很显然第二种方式更为简单,前提是你已经掌握了chr()函数。

接着是第二步,遍历字符串,统计字母数量。

其过程也比较简单,就是使用循环,对字符进行逐个处理,只是要注意两点,一是非字母字符无需处理,二是要将字母转换成大写字母。

我们可以借助字符串相关的方法来实现,如下:

isalpha():判断是否为字母upper():将字母转成大写

第三步,过滤字典。

我们的字典包含26个字母,统计完成之后,有些字母的数量仍然为0,需要将其过滤掉,这可以结合循环来实现。

最简单的方法莫过于使用字典推导式了,基本用法如下:

{key:value for (key,value) in dict.items() if condition}

第四步,分别输出字典的键和值。

这一步就比较简单了,由于键和值是分两行输出的,所以我们需要分别获取字典的键和值,可以使用如下两个方法:​​​​​​​

dict.keys(): 获取字典的键,返回列表dict.values():获取字典的值,返回列表

在输出的时候,使用空格分开即可。

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

三.编程实现

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

图片

代码不难理解,再强调4点:

1). 对于这里的chr()函数,如果不记得的话,可以直接写出整个字典;

2). 对于这里的isalpha()函数,如果不记得的话,也可以直接使用字符比较,如下:

'a' <= c <= 'z' or 'A' <= c <= 'Z'

3). 字母之间有一定的间隔,可以直接使用转义字符'\t',也可以直接打空格,数字之间也是如此;

4). 字母全部输出后,需要使用print()函数单独输出一个换行。

运行程序,输入样例中的数据,效果如下:

图片

至此,整个程序就全部完成了,你可以输入不同的字符串测试效果。

四.总结与思考

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

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

  • 字符串操作;

  • 字典的灵活运用;

  • 输入输出处理;

题目难度中等,难点有两个,一是要熟练掌握字符串的基本操作,包括连接运算、chr()、isalpha()和upper()等方法。二是字典的灵活运用,不但要理解字典的特点,同时还要熟悉字典的基本操作,尤其字典推导式的使用,可以极大地节省代码量。

ASCII码是学习编程的基础,必须要非常的熟悉,包括常见字符对应的ASCII值,以及ASCII码与字符之间的相互转换。

图片

在比赛的时候,是不能查阅任何资料的,这就要求每位同学在学习编程时,要多加练习,熟练掌握Python的基础知识,平时多一些努力,竞赛时就多一分轻松。

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

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

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

  • 18
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值