【Python自學】Python實作|簡易複利計算機,函數包含總金額、本金、利率、年限

這篇要用 Python 實作一個簡單的複利計算機。使用者輸入本金、利率與年限後,程式會逐年計算複利成長後的總金額。

📘 Python 自學實作|複利計算機

練習目的

這個實作練習的重點,是透過 while 迴圈檢查使用者輸入,並使用複利公式計算每一年的總金額。

  • 練習使用 while 迴圈。
  • 練習使用 input() 取得使用者輸入。
  • 練習使用 int()float() 進行型別轉換。
  • 練習使用 f-string 輸出格式化文字。
  • 練習使用 round() 處理計算結果。
複利計算的核心概念是:
每一年的利息會加回本金,下一年再一起繼續產生利息。

🧭 題目說明

這個複利計算機會讓使用者輸入三個資料:

  • 本金:一開始投入的金額。
  • 利率:每年的成長率,例如 0.05 代表 5%。
  • 年限:要計算幾年。

程式會檢查這三個數值是否大於 0。如果輸入小於或等於 0,就會要求重新輸入。

🧪 完整程式碼

以下是使用 while 迴圈完成的複利計算機。

# 程式開始 # 確認使用者輸入本金金額合法 amount = 0 while amount <= 0: amount = int(input("請輸入本金")) if amount <= 0: print("本金不得小於或等於 0") # 確認使用者輸入利率合法 rate = 0 while rate <= 0: rate = float(input("請輸入利率")) if rate <= 0: print("利率不得小於或等於 0") # 確認使用者輸入年限合法 time = 0 while time <= 0: time = int(input("請輸入年限")) if time <= 0: print("年限不得小於或等於 0") # 計算複利:總金額 = 本金 * (1 + 利率) ** 年限 year = 1 while year <= time: total = amount * (1 + rate) ** year print(f"第{year}年的總金額為{round(total)}") year += 1 # 程式結束
這個版本可以處理「小於或等於 0」的輸入,但如果使用者輸入文字,例如 abc,程式仍然會報錯。
如果要讓輸入驗證更完整,可以再搭配 try / except

🖥️ 程式執行結果

假設使用者輸入本金 10000、利率 0.05、年限 10,程式會逐年印出結果。

請輸入本金10000 請輸入利率0.05 請輸入年限10 第1年的總金額為10500 第2年的總金額為11025 第3年的總金額為11576 第4年的總金額為12155 第5年的總金額為12763 第6年的總金額為13401 第7年的總金額為14071 第8年的總金額為14775 第9年的總金額為15513 第10年的總金額為16289

可以看到本金會隨著年限增加逐年成長,這就是複利的效果。

🔎 程式說明

這支程式主要可以分成四個部分:輸入本金、輸入利率、輸入年限,以及逐年計算複利。

1. 檢查本金是否大於 0

amount = 0 while amount <= 0: amount = int(input("請輸入本金")) if amount <= 0: print("本金不得小於或等於 0")

這段程式會先把 amount 設為 0

因為 amount <= 0 一開始是成立的,所以會進入 while 迴圈,要求使用者輸入本金。

  • 如果使用者輸入 10000,條件不再成立,迴圈結束。
  • 如果使用者輸入 0 或負數,程式會印出提示,並繼續要求輸入。

2. 檢查利率是否大於 0

rate = 0 while rate <= 0: rate = float(input("請輸入利率")) if rate <= 0: print("利率不得小於或等於 0")

利率通常會是小數,例如:

  • 0.05 代表 5%。
  • 0.1 代表 10%。
  • 0.03 代表 3%。

所以這裡使用 float(),讓使用者可以輸入小數。

如果輸入利率 5%,程式中應該輸入 0.05,不是輸入 5
因為 5 會代表 500%,數字會長得很熱情,甚至熱情過頭。

3. 檢查年限是否大於 0

time = 0 while time <= 0: time = int(input("請輸入年限")) if time <= 0: print("年限不得小於或等於 0")

年限通常是整數,例如 5 年、10 年、20 年,所以這裡使用 int()

如果使用者輸入小於或等於 0 的年限,程式會要求重新輸入。

4. 使用 while 逐年計算複利

year = 1 while year <= time: total = amount * (1 + rate) ** year print(f"第{year}年的總金額為{round(total)}") year += 1

這段是複利計算的核心。

year1 開始,每跑一次迴圈就計算當年的總金額。

每次印出結果後,使用 year += 1,讓年份增加 1。

如果忘記寫 year += 1year 就不會增加,條件會一直成立,程式可能變成無限迴圈。

🧮 複利公式說明

這支程式使用的複利公式是:

總金額 = 本金 * (1 + 利率) ** 年限

對應到程式碼就是:

total = amount * (1 + rate) ** year

各變數代表的意思如下:

變數 意思 範例
amount 本金 10000
rate 利率 0.05
year 目前計算到第幾年 1、2、3...
total 該年度的總金額 10500

以第一年為例

如果本金是 10000,利率是 0.05,第一年的計算是:

10000 * (1 + 0.05) ** 1 = 10000 * 1.05 = 10500

以第二年為例

10000 * (1 + 0.05) ** 2 = 10000 * 1.1025 = 11025

因為第二年不是只加一次利息,而是連第一年累積後的成果一起成長,所以複利會隨時間慢慢拉開差距。

💡 round() 與 f-string 的用法

這段程式也用到了兩個很常見的輸出技巧:round()f-string

1. 使用 round() 四捨五入

round(total)

round() 可以把計算結果四捨五入成比較好閱讀的數字。

例如:

round(11576.25) 結果: 11576

2. 使用 f-string 組合輸出文字

print(f"第{year}年的總金額為{round(total)}")

f-string 可以把變數直接放進字串裡。

如果 year = 3round(total) = 11576,輸出就會變成:

第3年的總金額為11576

🧭 執行流程整理

用表格整理整支程式的流程,會更容易理解每一段在做什麼。

步驟 程式區塊 作用
1 輸入本金 確認本金大於 0。
2 輸入利率 確認利率大於 0,並允許小數。
3 輸入年限 確認年限大於 0。
4 複利計算 從第 1 年算到指定年限。
5 輸出結果 逐年印出總金額。

🔧 小改良:搭配 try / except 更安全

原本的程式可以避免使用者輸入小於或等於 0 的數字,但如果使用者輸入文字,程式仍然可能中斷。

例如:

請輸入本金abc ValueError: invalid literal for int() with base 10: 'abc'

如果已經學過 try / except,可以把輸入驗證寫得更完整。

def get_positive_number(prompt, number_type=float): value = 0 while value <= 0: try: value = number_type(input(prompt)) if value <= 0: print("輸入值必須大於 0!") except ValueError: print("請輸入正確的數字格式!") return value amount = get_positive_number("請輸入本金:", float) rate = get_positive_number("請輸入利率:", float) time = get_positive_number("請輸入年限:", int) year = 1 while year <= time: total = amount * (1 + rate) ** year print(f"第{year}年的總金額為{round(total)}") year += 1
這個版本的好處是:
不只可以擋掉小於等於 0 的數字,也可以避免使用者輸入文字造成程式中斷。

✅ 小結

這個複利計算機雖然不長,但包含了很多 Python 初學時很重要的概念。

  • while 迴圈:用來重複檢查使用者輸入是否有效。
  • input():取得使用者輸入。
  • int() / float():把輸入的字串轉成數字。
  • 複利公式:amount * (1 + rate) ** year
  • year += 1:讓年份逐次增加,避免無限迴圈。
  • round():將結果四捨五入,讓輸出更好閱讀。
  • f-string:把變數放進輸出文字中。
  • try / except:可以進一步讓輸入驗證更安全。
簡單記法:
先用 while 確認輸入有效,再用複利公式逐年計算,最後用 f-string 印出每一年的結果。
輸入本金、利率、年限 → 檢查是否大於 0 → 從第 1 年開始計算 → 印出每年的複利總金額

留言

這個網誌中的熱門文章

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

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

【新訓入伍】義務役新兵必看!入伍報到必備清單整理|2026年更新