回文词校验函数:python3

Palindrome words check function : python 3

is_palindrome 函数检查字符串是否为回文。回文是一个字符串,可以从左到右或从右到左读取,省略空格,并忽略大小写。回文的例子有像 kayak 和 radar 这样的词,以及像“Never Odd or Even”这样的短语。将此函数中的空白填入 return 如果传递的字符串是回文,则为 True,否则为 False。

def is_palindrome(input_string):
    # We'll create two strings, to compare them
    new_string = ""
    reverse_string = ""
    # Traverse through each letter of the input string
    for letter in input_string:
        # Add any non-blank letters to the 
        # end of one string, and to the front
        # of the other string. 
        if letter != " ":
            new_string     += letter
            reverse_string = letter + reverse_string
    return new_string
    # Compare the strings
    if new_string.lower() == reverse_string.lower():
        return True
    return False

print(is_palindrome("Never Odd or Even")) # Should be True
print(is_palindrome("abc")) # Should be False
print(is_palindrome("kayak")) # Should be True

有几个问题:

  • y 变量应该从 -1 开始,因为它应该引用最后一个字符。
  • y 的增量更改未正确缩进,因为它应该是 for 循环的一部分
  • input_string[y] 是个好主意,但您需要一个单独的 if 条件来检查该字符是否为非空白
  • 有一个return new_string语句不应该存在,因为最后的if仍然需要执行

我还应该注意,这个模板代码非常严格,并没有提倡 pythonic 编码风格,但这里是对上述问题的更正:

def is_palindrome(input_string):
    new_string = ""
    reverse_string = ""
    y = -1  # must be -1 not 1
    for letter in input_string:
        if letter != " ":
            new_string     += letter
        if input_string[y] != " ":   # separate condition
            reverse_string += input_string[y]
        y -= 1  # fixed indentation
    
    if new_string.lower() == reverse_string.lower():  # added condition
        return True
    return False

同样,这不是最优雅的解决方案,也不是很有效。