m0_51355118 2026-01-16 10:42 采纳率: 0%
浏览 18

python最长单词代码运行错误

dotcpp第2961题
题目描述
一个以'.'结尾的简单英文句子,单词之间用空格分隔,没有缩写形式和其它特殊形式,求句子中的最长单词。
代码如下:

s = input()[:-1].strip().split()
print(max(s, key = len))

提交报运行错误:运行时错误,非法的内存访问,数组越界,指针漂移,调用禁用的系统函数。
请教一下这个代码有什么问题?

  • 写回答

3条回答 默认 最新

  • 檀越@新空间 2026-01-16 10:43
    关注

    上午好☀️☀️☀️️
    本答案参考通义千问

    你提供的代码在处理输入时存在潜在的问题,导致运行时错误(非法内存访问、数组越界等)。以下是详细分析和解决方案:


    一、问题分析

    你的代码如下:

    s = input()[:-1].strip().split()
    print(max(s, key=len))
    

    1. input() 的输入格式问题

    题目描述中提到:“一个以 '.' 结尾的简单英文句子”,也就是说输入字符串应该以 . 结尾。

    例如:
    输入为 "Hello world.",那么 input() 得到的是 "Hello world.\n"(如果用户是通过回车输入的话),或者直接是 "Hello world."

    但你使用了 input()[:-1],这会将最后一个字符(即 .)去掉,然后进行 strip()split() 操作。

    问题点:当输入字符串长度为0或只有 . 时,input()[:-1] 可能导致索引越界。


    2. 可能的空输入或无效输入

    如果用户输入为空或者只包含 .,那么:

    • input()"."input()[:-1] 就是 ""
    • 然后 strip() 会变成 ""
    • split() 会得到一个空列表 []
    • max([]) 会抛出 ValueError: max() arg is an empty sequence

    这会导致程序崩溃。


    二、修改后的正确代码

    为了确保代码的健壮性,我们需要做以下几点:

    1. 验证输入是否非空
    2. 去除结尾的 .
    3. 分割单词并找到最长单词

    ✅ 修改后的代码如下:

    s = input().strip()
    
    # 去除结尾的 '.'(如果有的话)
    if s.endswith('.'):
        s = s[:-1]
    
    words = s.split()
    
    if words:
        print(max(words, key=len))
    else:
        print("没有单词")
    

    三、重点说明

    加粗重点部分:

    1. input().strip():防止输入中有前导或后导空格。
    2. s.endswith('.'):判断是否以 . 结尾,避免直接切片导致越界。
    3. if words::确保列表不为空,避免调用 max() 报错。
    4. max(words, key=len):正确找出最长单词。

    四、测试样例

    | 输入 | 输出 | |------------------|------------| | Hello world. | Hello | | This is a test.| This | | . | 没有单词 | | Hello . | Hello |


    五、总结

    你的原代码在某些边界情况下(如输入为空或只有 .)会导致 运行时错误。建议使用上述修改后的代码,确保程序的健壮性和稳定性。

    评论

报告相同问题?

问题事件

  • 创建了问题 1月16日