1. 程式人生 > >python 學習總結4

python 學習總結4

[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