filter、递归、切片完成作业
Topic source更少代码版:
def is_palindrome(n):
nn = str(n)
if nn[:1] == nn[-1:] :
if len(nn) < 3:
return True
else :
return is_palindrome(int(nn[1:len(nn)-1]))
else:
return False
5行代码版:
if str(n)[:1] == str(n)[-1:] :
if len(str(n)) < 3:
return True
else :
return is_palindrome(int(str(n)[1:len(str(n))-1]))
return is_palindrome(int(nn[1:len(nn)-1])) 这行代码是有问题的,比如输入2012这个数,则会等效判定为“212”这个数。
return is_palindrome(nn[1:- 1])
def is_palindrome(n):
s = str(n)
i, j = 0, len(s) - 1
while i < j and s[i] == s[j]:
i += 1
j -= 1
if i >= j:
return True
return False
六楼说得对 这个写法弊端在数字字符串强制转换为int上 比如字符串‘01’转换为int就会变为1,0被默认忽视了 而这一题我们期望不忽略任何一位数字。所以只有第一次调用该函数时需要转化一下str 后面的递归调用直接传字符串就行这样不会丢失数字位即不用特意转化为int 就像六楼写的那样
- 1
用户7642543399
def is_palindrome(n):
if n < 10 :
return True
nn = str(n)
if nn[:1] == nn[-1:] :
if len(nn) == 2:
return True
else :
return is_palindrome(int(nn[1:len(nn)-1]))
else:
return False