问题描述:
“回文数”是一种数字。如: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