Python回文检测函数问题求助:判断'loll'返回True而非False
回文字符串函数问题分析与修复
你的两段palindrome函数存在同一个致命问题:循环仅执行第一次迭代就直接返回结果,导致无法完成完整的回文判断。
以palindrome('loll')为例:
- 第一次循环i=0,比较
s[0]('l')和s[-1]('l'),结果为True,函数直接返回True,完全没检查后续字符 - 实际上当i=1时,
s[1]是'o',s[-2]是'l',二者不相等,此时才应该返回False
除此之外,代码还有几个冗余问题:
- 循环遍历了整个字符串长度,其实只需要遍历到字符串的一半即可,因为前后对称的字符无需重复比较
break语句永远不会执行,因为return会直接终止函数- 没必要将比较结果赋值给变量
x再判断,直接使用比较表达式更简洁
修复后的代码
def palindrome(s): # 只遍历字符串前半部分,避免重复比较 for i in range(len(s) // 2): # 只要发现一对对称字符不相等,直接返回False if s[i] != s[-1 - i]: return False # 所有对称字符都匹配,返回True return True
测试验证
palindrome('loll') # 返回False,符合预期 palindrome('level') # 返回True,判断正确
内容的提问来源于stack exchange,提问作者Sai Darsan K
相关产品推荐
相关产品推荐

