更新: 感谢下面的答案,我现在知道这是函数中的错误,与Python的行为无关。 (我的犯规)我已经改变了标题“在迭代字符串时Python可以跳过空格吗?” “这个功能有什么不对?”所以未来的读者会知道他们在这里找到的答案与函数有关,而不是Python。
我在Python中创建了一个函数,用于确定字符串是否为Palindrome。基本上,它同时从左侧和右侧迭代,并检查是否有任何字符不相等。如果是,则返回False。到达中间后,它会停止迭代并返回True。
def isPalindrome(string):
l = 0
r = -1
while(l < r+2):
if string[l] != string[r]:
return False
l += 1
r -= 1
return True
palin = raw_input("Enter string: ")
if(isPalindrome(palin)):
print "\""+palin+"\"","is a Palindrome."
else:
print "\""+palin+"\"","isn't a Palindrome."
它有效,但由于某种原因,它还将'pythonnoh ty p'等字符串识别为回文结构。虽然有时这可能是一件好事,但我想知道为什么函数似乎跳过字符串中的空格。它应该返回False,因为''不等于'y',但事实并非如此。
我的代码中是否存在问题,还是Python的行为?
答案 0 :(得分:4)
将string[0]
与string[-1]
进行比较后,l
和r
的值为1
和-2
。由于1 < 0
不正确,您的while循环结束。
试试这个:
def isPalindrome(s): return s == s[::-1]
如果要忽略空格,可以稍微扩展一下:
def isPalindrome(s, ignoreSpaces = False):
if ignoreSpaces:
s = s.replace(' ', '')
return s == s[::-1]
print (isPalindrome ('pythonnohtyp') )
print (isPalindrome ('pythonnohtyp', True) )
print (isPalindrome ('pythonnoh ty p') )
print (isPalindrome ('pythonnoh ty p', True) )
答案 1 :(得分:3)
您的while循环似乎有问题。
我添加了一个快速调试语句,并为您运行了一些可以揭示问题的测试。
>>> def isPalindrome(string):
l = 0
r = -1
while(l < r+2):
if string[l] != string[r]:
return False
print "left: %s" %string[l]
print "right: %s" %string[r]
l += 1
r -= 1
return True
>>> isPalindrome("ono")
left: o
right: o
True
>>> isPalindrome("on o")
left: o
right: o
True
>>> isPalindrome("palindrome")
False
>>> isPalindrome("palinilap")
left: p
right: p
True
>>> isPalindrome("palinalap")
left: p
right: p
True