Python入门习题(64)——OpenJudge百练习题:最长单词
程序员文章站
2022-04-01 17:56:24
...
题目描述
来源
OpenJudge网站 – 百练习题集-第3179号习题
要求
总时间限制: 1000ms 内存限制: 65536kB
描述
输入一个英文句子,长度不超过200个字符。其中可包含的符号只有逗号",“和句号”."。
输出句子中最长的一个单词。如果有多个这样的单词,输出最后出现的。
输入
多组数据,每行为一个句子,其中符号".“不代表句子结束,譬如人名中可含有”.”。
输出
每行一个最长单词。这里单词的定义是仅由连续的字母组成的字符串。
样例输入
Good morning.
Have a nice day.
样例输出
morning
nice
解题思路
-
对于每一行,采用第2点列出的步骤得出最长的单词。
-
对于一行字符,得出最长单词的步骤是:
(2-a)把点号,逗号替换成空格。
(2-b)把一行字符串分割成一组单词,空格作为分割点。
(2-c)从后往前扫描这一组单词,找出最长的单词。 -
本题的输入是行数不定的字符串。如何知道输入结束了?这一问题分成两个子问题,见下。
(a)运行程序的时候,在终端上该如何操作,以表示输入结束?答案是,在键盘上按Ctrl + D(在Windows终端上,则是按Ctrl + Z),再回车,就表示输入结束。这是一个约定。只按回车不表示输入结束,而是视为输入空行。
(b)在代码中,如何判别输入结束了呢?python在算法题中判断输入结束(EOF)一文给出了解答。下面的参考答案使用了该文描述的第二种做法。
参考答案
import sys #导入sys模块
for line in sys.stdin:
line = line.replace('.', ' ') #所有点号替换成空格
line = line.replace(',', ' ')
words = line.split() #分割得到单词
#从后往前遍历单词,找出最长的那一个
longest = words[-1] #-1是最后一个单词的索引
for word in words[-1::-1]: #第一个-1代表切片操作从索引-1开始。第二个-1表示切片操作从后往前逐个遍历words内的单词。
if len(word) > len(longest):
longest = word
print(longest)
测试用例
- 题目描述给出的测试用例覆盖了单词尾部有点号的情形,也覆盖了有多个最长单词,输出最后一个的情形。
- 单词中间有点号或逗号的情形。
样例输入
for line in sys.stdin
Good,morning.
Have a nice…day.*
样例输出
stdin
morning
nice
小结
- 本文示范了Python程序如何输入数目不定的多行的做法。
- 本文讲解了如何在一行字符串中找出最长的单词的算法。
推荐阅读
-
Python入门习题(81)——OpenJudge百练习题:报站
-
Python入门习题(87)——OpenJudge百练习题:判断游戏胜者
-
Python入门习题(62)——OpenJudge百练习题:方便记忆的电话号码
-
Python入门习题(63)——OpenJudge百练习题:DNA排序
-
Python入门习题(64)——OpenJudge百练习题:最长单词
-
Python入门习题(66)——OpenJudge百练习题:黑色星期五
-
Python入门习题(72)——OpenJudge百练习题:判断是否可以构成等差数列
-
Python入门习题(76)——OpenJudge百练习题:判断多个点是否在同一直线