为什么我的for循环总是返回'False'?

问题描述 投票:0回答:2

这是给定的任务:编写一个函数,以字符串格式接收两个单词,s1 和 s2。

如果 s1 和 s2 是回文,则应返回 True,否则返回 False。

我首先将字符串转换为列表。然后,我检查第一个字符串(现在转换为列表)是否是回文,然后检查第二个字符串(也转换为列表)。最终,我形成一个布尔值,如果两个列表都是回文,则返回 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

python python-3.x for-loop palindrome
2个回答
0
投票
if convert_s1[n] == convert_s1[-(n+1)]:
    is_s1_palindrome = True 
else:
    is_s1_palindrome = False 

这是错误的。一旦您检测到等效字符位置存在差异,它就不再是回文。

但是你继续,如果它再次开始匹配,你开始相信它再次是一个回文。

因此,像

abcddefg

 这样的东西将被视为回文,按照以下顺序:

  • a != g
    ,标记为假。
  • b != f
    ,标记为假。
  • c != e
    ,标记为假。
  • d == d
    ,标记为真。

-1
投票
您可以尝试使用切片:

def palindrome(s1, s2): is_s1_palindrome = s1 == s1[::-1] is_s2_palindrome = s2 == s2[::-1] return is_s1_palindrome and is_s2_palindrome
    
© www.soinside.com 2019 - 2024. All rights reserved.