這篇要用 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
這段是複利計算的核心。
year 從 1 開始,每跑一次迴圈就計算當年的總金額。
每次印出結果後,使用 year += 1,讓年份增加 1。
如果忘記寫 year += 1,year 就不會增加,條件會一直成立,程式可能變成無限迴圈。
🧮 複利公式說明
這支程式使用的複利公式是:
總金額 = 本金 * (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 = 3,round(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 年開始計算
→ 印出每年的複利總金額
留言
張貼留言