为何我的for循环始终返回False?回文判断函数调试求助
问题:判断两个字符串是否均为回文的函数出错
我需要编写一个接收两个字符串s1和s2的函数,当两者都是回文时返回True,否则返回False。我把字符串转成列表后分别判断,但输入"kayak"和"madam"这类回文时,函数始终返回False,求指导。
我的代码如下:
def palindrome(s1, s2): convert_s1 = list(s1) convert_s2 = list(s2) for letter in [convert_s1]: n = 0 if convert_s1[n] == convert_s1[-(n+1)]: is_s1_palindrome = True else: is_s1_palindrome = False for letter in [convert_s2]: m = 0 if convert_s2[m] == convert_s1[-(m+1)]: is_s2_palindrome = True else: is_s1_palindrome = False if (is_s1_palindrome == True) and (is_s2_palindrome == True): both_pals = True else: both_pals = False return both_pals
错误分析
- 循环逻辑无效:
for letter in [convert_s1]的写法只会让循环执行一次,因为[convert_s1]是仅包含列表的单元素列表,且你固定n=0,只判断了首尾一对字符是否相等,哪怕中间字符不匹配也会标记为回文,逻辑不完整。 - 变量引用错误:判断
s2是否为回文时,错误使用了convert_s1[-(m+1)],应该是convert_s2[-(m+1)],且else分支错误修改了s1的判断结果。 - 未遍历所有对称位置:回文要求所有对称位置的字符都相等,你的代码仅检查一对字符就得出结论,不符合回文判断逻辑。
修正后的代码
简洁版(利用Python字符串切片)
直接比较字符串与它的反转版本是最简洁的实现方式:
def palindrome(s1, s2): def is_palindrome(word): return word == word[::-1] return is_palindrome(s1) and is_palindrome(s2)
手动遍历版(修复原逻辑)
如果想保留手动遍历的思路,需要正确遍历所有对称位置:
def palindrome(s1, s2): def check_palindrome(word): char_list = list(word) left_idx = 0 right_idx = len(char_list) - 1 # 遍历到中间位置即可,无需全部遍历 while left_idx < right_idx: if char_list[left_idx] != char_list[right_idx]: return False left_idx += 1 right_idx -= 1 return True return check_palindrome(s1) and check_palindrome(s2)
内容的提问来源于stack exchange,提问作者thumpy
相关产品推荐
相关产品推荐

