问题描述:

“回文数”是一种数字。如:98789,这个数字正读是98789,倒读也是98789,正读倒读一样,所以这个数字就是回文数。
编程判断一个数是否是回文数。


我的代码:

n=list(raw_input("please input a number: "))
zx=dx=[]
zx=n
dx=n[::-1]
for i in range(len(n)/2):
   if zx[i]==dx[i]:
      print "%d's number is a Palindrome number..." %(i+1)
   else:
      print "%d's number is not a Palindrome number..." %(i+1)


我的思路:

首先让输入的字符格式的数字list化,得到一个包含各数字的列表,此时的列表是正向的,赋值给zx,然后使用切片的方式翻转原列表并赋给dx,这样就得到了正序和倒序的列表;

比较的时候是直接比较两个列表的元素的,而且比较次数为列表长度除以2,如3位数121只比较一次1即可,4位数如1221比较1和2两次即可。


示例代码:

def fun(n):
    a = []
    while n:
        a.append(n % 10)
        n /= 10
    for i in xrange(len(a)):
        if a[i] != a[-i-1]:
            break
    else: 
         print u'回文数'
         return True
    print u'非回文数'
    return False
fun(78987)

代码分析:

示例代码中的while循环来判断数的位数也就是比较次数,下面的for循环根据数的位数分别进行判断是否为回文数;


总结:

1.reverse方法

将列表中元素反转,不会对列表内元素进行排序操作,例如:

>>> a=[1,2,3,4,5]
>>> a
[1, 2, 3, 4, 5]
>>> b=a.reverse()
>>> print b
None
>>> b
[1, 2, 3, 4, 5]
>>> b.reverse()
>>> b
[5, 4, 3, 2, 1]

reverse之后原值被改变,且不能进行赋值操作;


2.sort方法

对列表内容进行正向排序,排序后的新列表会覆盖原列表(id不变),例如:

>>> a=[1,3,2,5,4]
>>> a.sort()
>>> a
[1, 2, 3, 4, 5]
>>> b=a.sort()
>>> b
>>> print b
None

sort之后对列表进行正向排序,而且不会保存原来的列表,也不能进行赋值操作;

3.sorted方法

即可以保留原列表,又能得到已经排序好的列表,例如:

>>> a=[1,3,5,2,4]
>>> b=sorted(a)
>>> b
[1, 2, 3, 4, 5]
>>> a
[1, 3, 5, 2, 4]
>>>

sorted之后既保留了原列表也得到了排序好的表,且能进行赋值操作;

4.原地翻转列表

4.1切片方式

>>> a[::-1]
[4, 2, 5, 3, 1]
>>> b=a[::-1]
>>> b
[4, 2, 5, 3, 1]

4.2reverse方式

>>> a
[1, 3, 5, 2, 4]
>>> a.reverse()
>>> a
[4, 2, 5, 3, 1]



题目出处:http://www.cheemoedu.com/exercise/64