问题:求列表中每个元素的元素次方之和
>>> a=[1,2,3,4]
>>> k=len(a)
第一种解法
# s=0
# for x in a:
# s+=x**k
第二种解法
列表解析,每个元素的元素数次方
>>> [x**k for x in a]
[1, 16, 81, 256]
求列表元素之和
>>> sum([x**k for x in a])
354
水仙花数
一。先在python交互式中寻找算法
>>> 12345 %10
5
>>> 1234 %10
4
>>> 12345/10
1234
>>> 1234/10
123
>>>
>>> k=12345
>>> while k>0:
... print k%10
... k/=10
...
5
4
3
2
1
二。再在脚本中设计具体的实现,加判断,加循环,加输入与输出。
fgy@fgy-QTH6:~/Documents/python$ cat num.py def isA(n): a=[] t=n while t>0: a.append(t%10) t/=10 k=len(a) return sum(x**k for x in a)==n # s=0 # for x in a: # s+=x**k # return s==n begin=raw_input('please input start num: ') end=raw_input('please input end num: ') for x in range(int(begin),int(end)): if isA(x):print x
三。执行时验证。
fgy@fgy-QTH6:~/Documents/python$ python num.py
please input start num: 100
please input end num: 1000
153
370
371
407
找出不重复的三位数,下面这个程序使用了3重for循环,如果是4位,5位就不太适用了
num is : 986 num is : 987 count 648 fgy@fgy-QTH6:~/Documents/python$ cat num2.py #encoding=utf-8 #a: 1-9 #b: 0-9 #c: 0-9 l=range(10) count=0 for a in l[1:]: for b in l: if a==b:continue #过滤a!=b的情况 for c in l: if c!=a and c!=b: #过滤b!=c,c!=a的情况,得到了互不相等的情况 print 'num is : %d%d%d' %(a,b,c) count+=1 print 'count',count