You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python编写获取字符串最长单词函数报索引越界错误如何解决

问题原因

  • 内层while循环的判断逻辑顺序错误。你当前写的是while(sen[i] != " " and i < len(sen)),Python会从左到右执行判断,当i的值等于字符串长度时,会先尝试访问sen[i],这个位置已经超出字符串合法索引范围(合法索引是0到len(sen)-1),直接触发越界错误。
  • 循环终止条件逻辑有漏洞。你设置当i == len(sen)-1时就把ind设为0终止循环,会漏掉最后一个字符的处理,也可能导致后续i继续累加超出范围。
  • 没有初始化longestword变量,如果输入全是空格或者空字符串会出现变量未定义的错误,另外max是Python内置函数名,不建议作为变量名使用,避免命名冲突。

修复方案

  1. 调换内层while循环两个判断的顺序,先判断i < len(sen),再判断字符是否为空格,这样i超出范围时会直接终止循环,不会访问非法索引。
  2. 优化外层循环逻辑,直接用i < len(sen)作为循环条件,不需要额外的ind变量控制,逻辑更清晰。
  3. 初始化longestword为空字符串,最大长度初始值设为0,适配空输入、全空格输入等边界情况。

修正后代码

def longestWord(sen):
    max_len = 0
    longestword = ""
    i = 0
    str_len = len(sen)
    while i < str_len:
        # 跳过连续空格
        while i < str_len and sen[i] == " ":
            i += 1
        if i >= str_len:
            break
        # 读取当前完整单词
        current_word = ""
        current_len = 0
        while i < str_len and sen[i] != " ":
            current_word += sen[i]
            current_len += 1
            i += 1
        # 更新最长单词记录
        if current_len > max_len:
            max_len = current_len
            longestword = current_word
    return longestword

print(longestWord("ceci est un texte"))

运行后输出结果为texte,符合预期。

内容的提问来源于stack exchange,提问作者Maryam Ouafik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 02:24:04