[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第44讲。
单词频次,本题是2020年10月25日举办的第12届蓝桥杯青少组Python编程选拔赛真题,题目要求编程统计给定一段文章中某个单词出现的次数。
先来看看题目的要求吧。
一.题目说明
编程实现:
给定一个单词及一段文章,请你输出这个单词在文章中一共出现的次数,和单词第一次出现时首字母位于文章中的位置(文章中第一个字符位置为0,第二个字符位置为1,字符包含空格)。
注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须是文章中独立的单词,不能是某个单词中的一部分。
例如:to 和tomato 不能匹配。
输入描述:
第1行为一个字符串,其中只含字母,表示给定单词(1 ≤ 字符串长度 ≤ 10)
第2行为一个字符串,其中只含字母和空格,表示给定的文章(1 ≤ 文章长度 ≤ 100000)
输出描述:
如果在文章中找到给定单词这输出两个整数,分别是单词在文章中出现的次数和第一次出现的位置,两个整数之间用一个空格隔开。如果单词在文章中没有出现,则直接输出一个整数-1。
样例输入:
To
to be or not to be is a question
样例输出:
2 0
评判标准:
-
7分:能正确输出一组数据:
-
7分:能正确输出两组数据:
-
7分.能正确输出三组数据:
-
7分:能正确输出四组数据;
-
7分:能正确输出五组数据。
二.思路分析
这是一道简单的字符串运算题,考查的知识点包括字符串和列表的常见用法。
本题没有复杂的逻辑,只需要按照题目要求分布解决即可,基本上可以分成如下4步:
-
统一转换大小写
-
将文章转成列表
-
在列表中统计单词的次数
-
计算单词第一次出现的位置
根据题目的描述,在匹配单词时不区分大小写,因此需要先将单词和文章统一转成大写(或者小写)。
在指定字符串中查找某个单词,可以使用两种方法,一是直接使用字符串的find()方法,二是将字符串的单词拆分并保存到列表中再进行查找,因为列表处理起来更方便。
要统计某个单词出现的次数,可以直接使用列表的count()方法,如下:
list.count(obj)
相应的,如果出现次数 > 0,就需要找到单词第一次出现的位置,我们可以使用index()方法,如下:
ist.index(x[, start[, end]])
其中,x表示查找的对象,start和end都是可选的,分别表示查找的起始位置和结束位置。
思路有了,接下来,我们就进入具体的编程实现环节。
三.编程实现
根据上面的思路分析,我们编写代码如下:
代码比较简单,说明两点:
1). 这里将单词和文章都转成大写,你也可以使用lower()转成小写;
2). 对于位置的计算,默认设置为-1,表示没找到,如果单词出现了,则使用index()获取其位置并更新。
当然,Python还支持if...else的单行写法,也可以将判断代码简化如下:
至此,整个程序就全部完成了,你也可以输入不同的单词和文章来测试效果了。
四.总结与思考
本题代码在10行左右,涉及到的知识点包括:
-
输入输出;
-
字符串的大小写转换;
-
字符串转换为列表;
-
列表的常见方法;
本题难度一般,关键是要掌握字符串和列表的常见方法,否则就有些无从下手了。
实际上,在真正的编程中,字符串和列表出现的频率是非常高的,为此,Python提供了大量好用的函数和方法,一定要多加练习,并做到灵活运用。
超平老师给你留一道思考题,如果直接使用字符串的查找方法,代码又该如何编写呢?
你还有什么好的想法和创意吗,也非常欢迎和超平老师分享探讨。
如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香😄
需要源码的,可以移步至“超平的编程课”gzh。