标签:改进 编写 value 题目 [] class 学习总结 new div
今天在codewears上做了一道题,仅为6kyu级别,但自己收获良多
题目为:编写一个函数,sum_dig_pow(a, b),找到range [a, b]之间所有符合特殊规则的的数字,将其放入列表中,并返回。
这种特殊规则,如下所示;
135 = 1^1 + 3^2 + 5^3
89 = 8^1 + 9^2
自己最开始写的函数为:
import math
def sum_dig_pow(a, b):
lis=[]
for i in range(a,b+1):
li=[]
new_i=i
#找到数字是几位数
k=int(math.log10(new_i))
#将数字切分,如将135切分为[1,3,5]
for j in range(k+1):
li.append(int(new_i/(math.pow(10,k-j))))
new_i=new_i%(math.pow(10,k-j))
#求如 1^1 + 3^2 + 5^3所示的和值
ex=1
sum=0
for x in li:
sum+=math.pow(x,ex)
ex+=1
#判断和值是否与当前数字相等
if sum==i:
lis.append(i)
return lis
之后复习了之前的一些内容,对上述代码进行改进;
lis=[]
def sum_dig_pow(a, b):
for i in range(a,b+1):
#将数字切分字符串,如将135切分为[‘1‘,‘3‘,‘5‘]
li=re.findall(‘[0-9]‘,str(i))
sum=0
#求和
for key,value in enumerate(li):
sum+=pow(int(value),int(key)+1)
#判断
if sum==i:
lis.append(i)
return lis
标签:改进 编写 value 题目 [] class 学习总结 new div
原文地址:http://www.cnblogs.com/xiaolong1989/p/7747958.html