欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python入门习题(64)——OpenJudge百练习题:最长单词

程序员文章站 2022-04-01 17:56:24
...

OpenJudge百练第3179号习题:最长单词

题目描述

来源
OpenJudge网站百练习题集-第3179号习题

要求
总时间限制: 1000ms 内存限制: 65536kB

描述
输入一个英文句子,长度不超过200个字符。其中可包含的符号只有逗号",“和句号”."。
输出句子中最长的一个单词。如果有多个这样的单词,输出最后出现的。

输入
多组数据,每行为一个句子,其中符号".“不代表句子结束,譬如人名中可含有”.”。

输出
每行一个最长单词。这里单词的定义是仅由连续的字母组成的字符串。

样例输入
Good morning.
Have a nice day.

样例输出
morning
nice

解题思路

  1. 对于每一行,采用第2点列出的步骤得出最长的单词。

  2. 对于一行字符,得出最长单词的步骤是:
    (2-a)把点号,逗号替换成空格。
    (2-b)把一行字符串分割成一组单词,空格作为分割点。
    (2-c)从后往前扫描这一组单词,找出最长的单词。

  3. 本题的输入是行数不定的字符串。如何知道输入结束了?这一问题分成两个子问题,见下。
    (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)

测试用例

  1. 题目描述给出的测试用例覆盖了单词尾部有点号的情形,也覆盖了有多个最长单词,输出最后一个的情形。
  2. 单词中间有点号或逗号的情形。
    样例输入
    for line in sys.stdin
    Good,morning.
    Have a nice…day.*
    样例输出
    stdin
    morning
    nice

小结

  1. 本文示范了Python程序如何输入数目不定的多行的做法。
  2. 本文讲解了如何在一行字符串中找出最长的单词的算法。