def is_palindrome(s):
if type(s) != str:
return False
# base case before the or; recursive case after the or
if len(s) <= 1 or s[0] == s[-1] and is_palindrome(s[1: -1]):
return True
return False
strs = [False, 17, "", "a", "as", "ask", "ewe", "emma", "dromedary", "racecar"]
for s in strs:
print("%s --> %s" % (s, is_palindrome(s)))
请问 ispalindrome(s[1: -1]): 在 if len(s) <= 1 or s[0] == s[-1] and ispalindrome(s[1: -1]):当中起了什么作用?为什么是(s[1: -1])?
1楼 @Achmed 您好,感谢您的回答。本人目前在一所高中上Computer Science的课程,可能是因为语言或者是个人学习能力的问题,所以很多问题可能理解错误或不到位或者无法理解。本人的Computer Science老师在本人学习Learn Python the hard way的中途给本人这个关于Palindrome的Task。
为何要实现palindrome的判断可以用s[0] == s[-1] and is_palindrome(s[1: -1]),本人从字面上理解前半部分,但无法理解后半部分重复这个方程的作用
s在这里如果是一个string的性质,为什么s[a :b]? 这代表了什么? 是跟词典a对应b? 还是a到b?
如果在這里-1对应的是最后一个字符的话,为什么不是s[0:-1]而是s[1:-1]? is_palindrome(s[1:-1])究竟是在这个方程里干了些什么?
感谢您付出宝贵的时间给本人的建议也期待您的回答。
你搜索python 字符串切片和list切片的资料。看看。就是两篇文章那么多的内容看完就行。
你先切片取到值后再代入到is_palindrome中判断就清晰了。
for s in strs 是每次把str里的一个元素传递给s,再切片取出字符。
你试一下在 Python 控制台里敲一下下边的代码
s = "012345"
s1 = s[1:-1]
print s1
看一下输出是什么
典型的是递归啊...这题目算典型的了。反正递归思路是一定要把问题尽量切分缩小,尽量接近base case. base case看你题目是len(s) <= 1,return true。现在高中就叫python啦。。。正是高大上,我在澳洲学的IT...也是python入门,专门有一节讲递归思路。