我有一个函数来测试字符串是否是回文:
def palindrome(raw_text):
# first to convert raw_text to a string of lower case letters and remove the space
text = raw_text.lower()
text = text.replace(' ', '')
print('text is now', text)
print('length of text is', len(text))
if len(text) == 1 or len(text) == 0:
return True
else:
if text[0] == text[-1]:
print('so far so good')
palindrome(text[1:-1])
else:
return False
为了清楚地进行调试,我添加了一些打印命令来帮助我。 如果我尝试:
raw_text = 'abcba'
print(palindrome(raw_text))
我会得到:
text is now abcba
length of text is 5
so far so good
text is now bcb
length of text is 3
so far so good
text is now c
length of text is 1
None
那么为什么我最后会得到一个无?我确实拥有return True
len(text) == 1 or 0
命令
如果我只是给raw_text = 'a'
,它会给我:
text is now a
length of text is 1
True
答案 0 :(得分:3)
你忘记了正确递归。
return palindrome(text[1:-1])
答案 1 :(得分:0)
谢谢,正如@Ignacio Vazquez-Abrams所说,我没有正确递归。 实际上代码不需要这么复杂。 我把它修改为:
def palindrome(raw_text):
# first to convert raw_text to a string of lower case letters and remove the space
text = raw_text.lower()
text = text.replace(' ', '')
print('text is now', text)
print('length of text is', len(text))
if len(text) <= 3:
return text[0] == text[-1]
else:
return text[0] == text[-1] and palindrome(text[1:-1])