编写一个检查字符串是否为回文的函数

时间:2015-10-25 21:31:13

标签: python

我需要编写一个函数来确定给定的字符串是否是回文。这是我到目前为止写的:

def isPalindrome(string):
    found = False
    for i in range(len(string)):
        if string[i] == string[len(string) - 1 - i]:
            found = True

    if found == True:
        print("Inserted string is a palindrome. ")
    else:
        print("Inserted string is not a palindrome. ")

    return

我遍历字符串,并检查前向和后向迭代是否给出相同的字符。但是如果我通过执行isPalindrome(“hello”)来应用这个程序,它说这是一个回文。它没有给我正确的输出。有人可以指出我犯的任何错误,以便我可以从中吸取教训。

1 个答案:

答案 0 :(得分:2)

当您找到等于“镜像”字符的任何字符时,您将found设置为true。例如,对于具有奇数个字符的单词,总是为真(中间字符等于中间字符),但是其他单词也将生成错误匹配。以单词winner为例,其中两个n处于镜像位置,你的功能会宣告它为回文,而显然不是。

不要将found设置为true,如果发现不匹配,请提前退出:

found = True
for i in range(len(string)):
    if string[i] != string[len(string) - 1 - i]:
        found = False
        break

所以你开始假设它是一个回文,当你找到相反的证据时你退出。

请注意,您可以在检查一半字符串时停止检查:

for i in range((len(string) + 1) // 2):
    if string[i] != string[len(string) - 1 - i]:
        found = False
        break

或者您可以测试字符串是否等于其反向; [::-1]为你提供了相反的字符串:

string == string[::-1]