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