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内置函数名,不建议作为变量名使用,避免命名冲突。
修复方案
- 调换内层while循环两个判断的顺序,先判断
i < len(sen),再判断字符是否为空格,这样i超出范围时会直接终止循环,不会访问非法索引。 - 优化外层循环逻辑,直接用
i < len(sen)作为循环条件,不需要额外的ind变量控制,逻辑更清晰。 - 初始化
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
相关产品推荐
相关产品推荐

