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

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. 本文讲解了如何在一行字符串中找出最长的单词的算法。
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值