【Python實作】用Python求阿姆斯壯數Armstrong Numbers有哪些?

 Python實作】求阿姆斯壯數Armstrong Numbers.

【目的】練習字串方法、函數、if/else、邏輯運算子

 

【先解釋一下】所謂阿姆斯壯數Armstrong number 指的是一個 n 位數的整數,它的所有位數的 n 次方和恰好等於自己。

舉個例子來說:1634=14+64+34+44

1634是一個4位數,而1634所包含的個別數字分別是:1634,而這四個數字的4次方和,又剛好是1634,這樣我們就稱1634Armstrong Numbers

再舉個例子:153=13+53+33

153也符合上述條件,所以是Armstrong Numbers

 

【題目】讓使用者輸入兩個數字(n,m),找出nm範圍內的所有Armstrong Numbers.

 

 

輸入兩個數字n, m(0<n<m<1000000),尋找 armstrong number 的範圍

python

 

#程式開始

 

def is_armstrong(num):

    # 把數字轉字串方便取每個位數

    digits = str(num)

    n = len(digits)

    total = sum(int(d)**n for d in digits)

    return total == num

 

# 讀取輸入

n = int(input("請輸入起始值 n: "))

m = int(input("請輸入結束值 m: "))

 

# 確保條件 0 < n < m < 1000000

if not (0 < n < m < 1000000):

    print("輸入範圍錯誤,請確認 0 < n < m < 1000000")

else:

    print(f"{n} {m} 之間的 Armstrong numbers")

    for i in range(n, m+1):

        if is_armstrong(i):

            print(i)

 

#程式結束

 

程式輸出結果:

請輸入起始值 n: 10

請輸入結束值 m: 10000

10 10000 之間的 Armstrong numbers

153

370

371

407

1634

8208

9474

 

程式說明:

先寫is_armstrong() 函數,把數字轉成字串,就能逐個取出來。

n = len(digits),用len()函數取得位數

sum(int(d)**n for d in digits) 計算每位數的 n 次方總和

return total == num,最後回傳布林值,如果total == num就會回傳true

 

n = int(input("請輸入起始值 n: "))

m = int(input("請輸入結束值 m: "))

主程式:讀入使用者輸入的 n(起始)與 m(結束)

 

if not (0 < n < m < 1000000):

    print("輸入範圍錯誤,請確認 0 < n < m < 1000000")

確保使用者輸入正確的數字範圍。

 

驗證是否符合題目範圍

for 迴圈逐一檢查,是 Armstrong number 就印出

 

 for i in range(n, m+1):

     if is_armstrong(i):

         print(i)

for迴圈去跑nm的範圍,由於for迴圈包含第一個數字,不包含最後一個數字的特性,所以要m+1

if is_armstrong(i):

如果i再跌代的過程,於我們上面所寫的函數is_armstrong規則裡回傳true的話,那麼就印出i

 

 

 

 

 

 

留言

這個網誌中的熱門文章

常見的化痰粉愛克痰(小鳥粉)怎麼吃?|化痰粉成人及小孩的使用劑量|紅色與藍色比較

麻將教學懶人包|從規則到牌理的完整觀念整理(附實戰心得)

麻將新手必看!不知道聽什麼牌怎麼辦?超多種實戰聽牌範例,教你怎麼判斷胡牌機會