【Python實作】用Python求阿姆斯壯數Armstrong Numbers有哪些?
【Python實作】求阿姆斯壯數Armstrong Numbers.
【目的】練習字串方法、函數、if/else、邏輯運算子
【先解釋一下】所謂阿姆斯壯數Armstrong number 指的是一個 n 位數的整數,它的所有位數的 n 次方和恰好等於自己。
舉個例子來說:1634=14+64+34+44
1634是一個4位數,而1634所包含的個別數字分別是:1、6、3、4,而這四個數字的4次方和,又剛好是1634,這樣我們就稱1634是Armstrong
Numbers。
再舉個例子:153=13+53+33
153也符合上述條件,所以是Armstrong
Numbers。
【題目】讓使用者輸入兩個數字(n,m),找出n至m範圍內的所有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迴圈去跑n~m的範圍,由於for迴圈包含第一個數字,不包含最後一個數字的特性,所以要m+1。
if is_armstrong(i):
→ 如果i再跌代的過程,於我們上面所寫的函數is_armstrong規則裡回傳true的話,那麼就印出i。
留言
張貼留言