为什么这个回文试验不起作用?

ali*_*cew 3 python

回文是一个向前和向后读取相同的字符串.回文的例子包括"lol","abba","雷达"和"pickle elkci​​p".指示它是否在以下文档字符串中描述的所有情况下都有效:'''如果字符串s是回文,则返回True,否则返回False.'''

def palindrome2(s):
    n = len(s)
    pal = True
    for i in range(n/2):
        if s[i] == s[n-i-1]:
            pal = True
        else:
            pal = False
    return pal
Run Code Online (Sandbox Code Playgroud)

我不明白为什么这个功能不起作用.对我来说,似乎功能正常.显然,布尔值被滥用,但我不明白上面的布尔值是如何使用得不好的.有人可以向我解释一下吗?

ulm*_*ngt 8

为了好玩,你也可以尝试更简单:

def palindrome(s):
  return s[::-1] == s
Run Code Online (Sandbox Code Playgroud)

(让读者了解它是如何工作的)


Lev*_*von 6

方式的循环体是编码的值pal可改变之间TrueFalse在一对给定的字符是否发生特定迭代期间以匹配或不反复取决于.

最好检查不等式,然后立即将布尔变量设置palFalse并退出循环.

像这样的东西:

def palindrome2(s):
    n = len(s)
    pal = True

    for i in range(n/2)
        if s[i] != s[n-i-1]: # the moment it's false
           pal = False       # set pal and
           break             # drop out of the loop

    return pal
Run Code Online (Sandbox Code Playgroud)

或者,不使用布尔变量:

    ...
    for i in range(n/2)
        if s[i] != s[n-i-1]: # the moment it's false
           return False      # exit the function by returning False

    return True  # otherwise return True
Run Code Online (Sandbox Code Playgroud)