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

删除空格后判断字符串是否为回文的Python代码报索引错误求排查

问题分析与修复方案

核心错误点

  • split()方法误用:你想用这个方法处理空格,但split()是按空格把字符串分割成单词列表。比如输入"kayak"时,new_string.split()得到的是["kayak"](仅1个元素),但你用len(new_string)拿到的是字符串长度5,后续访问newstringseperated[n-1-i]时,索引远超列表长度,直接触发索引错误。要逐个字符处理,应该直接用字符串索引(字符串本身支持按索引访问),或者转成字符列表list(new_string)。
  • 变量未初始化:hello和hello2只有在字符不匹配时才会被赋值,若所有字符都匹配,这两个变量根本没定义,后续判断会抛出NameError。
  • 循环范围错误:偶数长度字符串的循环范围range(n//2 -1)会少循环一次,比如"deed"长度为4,n//2 -1等于1,只循环i=0,漏掉i=1的比较,正确范围应该是range(n//2)。
  • 冗余输出:找到不匹配字符时会打印两次"False",属于重复输出。

修复后的代码

def is_palindrome(input_string):
    # 去除所有空格(strip仅处理首尾,replace处理全部空格)
    new_string = input_string.replace(" ", "")
    n = len(new_string)
    is_valid = True
    
    # 循环比较前半段与后半段对应位置的字符
    for i in range(n // 2):
        if new_string[i] != new_string[n - 1 - i]:
            is_valid = False
            break  # 找到不匹配就提前终止循环
    
    print(is_valid)

修复说明

  1. 用replace(" ", "")替代strip(),确保去掉字符串中所有空格,而不只是首尾。
  2. 直接使用字符串索引访问字符,无需额外转列表,简化逻辑。
  3. 提前初始化is_valid标记,避免变量未定义的问题。
  4. 统一循环范围n//2,无论字符串长度奇偶都适用(奇数长度的中间字符无需比较)。
  5. 找到不匹配字符后立即break循环,提升代码效率,避免无效遍历。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:45:15