标签:改进 编写 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