我需要编写一个函数来确定给定的字符串是否是回文。这是我到目前为止写的:
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”)来应用这个程序,它说这是一个回文。它没有给我正确的输出。有人可以指出我犯的任何错误,以便我可以从中吸取教训。
答案 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]