前回は、投資資産額・想定利回り・運用期間を入力し、正しい数値が入力されるまで繰り返し入力を受け付けるプログラムを作成しました。
今回は、その続きとして複利計算機能を追加していきます。
最終的には、運用後の資産額だけでなく、毎年どのように資産が増えていくのかも表示できるようにブラッシュアップしていきます。
前回までのコード
前回作成したコードはこちらです。
def positive_number(message):
while True:
try:
value = float(input(message))
if value > 0:
return value
else:
print('0より大きい数値を入力してください')
except ValueError:
print('数字を入力してください')
assets = positive_number('投資資産額を入力してください>')
rate = positive_number('想定利回りを入力してください>')
period = positive_number('運用期間を入力してください>')
ここまでで、入力チェック付きのプログラムが完成しています。
今回は、この続きに複利計算を追加します。
まずは複利計算を実装
まずは、複利の計算式をそのままコードにしてみました。
result = assets * (1 + rate / 100) ** period
print(int(result))
実行すると、運用期間終了時点の資産額が表示されます。
例えば、
- 投資資産額:100万円
- 想定利回り:5%
- 運用期間:10年
と入力すると、16288946と表示されます。およそ162万円です。
まずは最低限の複利計算が完成しました。
毎年の資産推移も表示したい
最終結果だけでは少し物足りないので、毎年どのように資産が増えていくのかも表示してみます。
最初に書いたコードはこちらです。
for i in range(1, period + 1):
result = assets * (1 + rate / 100) ** i
print(int(result))
エラーが発生
実は最初は次のように書いていました。
for i in range(1, period + 1):
しかし、実行するとエラーが発生しました。
その原因は、period が float 型だからです。
range() は整数しか受け取れないため、
int(period)
と整数へ変換する必要がありました。
このように、エラーメッセージを確認しながら修正していくことも、プログラミング学習では大切だと感じました。
修正後
for i in range(1, int(period) + 1):
result = assets * (1 + rate / 100) ** i
print(int(result))
表示が見づらい…
エラーは解決しましたが、今度は表示がこのようになってしまいました。
1050000
1102500
1157625
1215506
...
数字だけが並んでいるので、何年後の金額なのか分かりません。
表示を改善
そこで、f文字列を使って表示内容を改善しました。
for i in range(1, int(period) + 1):
result = assets * (1 + rate / 100) ** i
print(f'{i}年後:{int(result):,}円')
これで
1年後:1,050,000円
2年後:1,102,500円
3年後:1,157,625円
のように、かなり見やすくなりました。
また、:, を使うことで3桁ごとにカンマが入り、金額も読みやすくなっています。
コードをさらにブラッシュアップ
同じ計算式を何度も書いていたので、利回り部分を変数にまとめました。
growth = 1 + rate / 100
これにより、
assets * growth ** i
とシンプルに書けるようになりました。
コードの意味も分かりやすくなり、修正もしやすくなります。
完成したコード
def positive_number(message):
while True:
try:
value = float(input(message))
if value > 0:
return value
else:
print('0より大きい数値を入力してください')
except ValueError:
print('数字を入力してください')
assets = positive_number('投資資産額を入力してください>')
rate = positive_number('想定利回りを入力してください>')
period = positive_number('運用期間を入力してください>')
growth = (1 + rate / 100)
for i in range(1, int(period)):
result = assets * growth ** i
print(f'{i}年後:{int(result):,}円')
result = assets * growth ** period
print(f'最終資産額({period}年後):{int(result):,}円')
まとめ
今回は、資産シミュレーターに複利計算機能を追加しました。
最初は計算結果を表示するだけでしたが、
- 毎年の資産推移を表示
range()のエラーを修正growth変数を使ってコードをシンプルに整理- 見やすい表示へ改善
と、少しずつブラッシュアップしながら完成させることができました。
プログラムは最初から完璧に書くのではなく、「動かして、改善していく」ことが大切だと改めて感じました。
次回はいよいよ、このプログラムをWebアプリとして公開できるようにしていきます。
実はWebアプリとして公開は全くの未知の世界です。我が相棒チャッピーちゃんに聞きながら試行錯誤しようと思います。


コメント