Discuss / Python / 两种解法:

两种解法:

Topic source

第一种:

# -*- coding: utf-8 -*-

#回数是指从左向右读和从右向左读都是一样的数,例如12321,909。请利用filter()筛选出回数:

def is_palindrome(n):

    m=str(n)

    for i in range(len(m)//2+1):  #加1避免对于个位数的回数range(0)无法计算的问题

        if m[i]==m[-i-1]:

            return True

        else:

            return False

    pass

第二种:

# -*- coding: utf-8 -*-

def is_palindrome(n):

    m=str(n)

    if m == m[::-1]:  #使用字符串翻转的形式(切片):

        return True

    else:

        return False

公纸晓白

#2 Created at ... [Delete] [Delete and Lock User]

第一种解法在数值大于1000之后就不对了。只判断了外面一层是相同的就返回了,里面还没有判断,只有在1000以内有效,需要改一下:

def is_palindrome(n):

    m=str(n)

    num = 0

    for i in range(len(m)//2+1):

        if m[i]==m[-i-1]:

            num = num + 1

        else:

            return False

        if num  == len(m)//2+1:

            return True

    pass

output1 = filter(is_palindrome, range(1000, 2000))

print('1000~2000:', list(output1))

公纸晓白

#3 Created at ... [Delete] [Delete and Lock User]
def is_palindrome(n):
    m =str(n)
    num = 1
    for i in range(int(len(m)//2)):
        if m[i] == m[-i-1]:
            pass
        else:
            num = 0
    return num

  • 1

Reply