python 學習總結4
阿新 • • 發佈:2017-10-28
[0 當前 light clas turn 一個 math new dig
今天在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
python 學習總結4