🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

4327閲覧

python/単利複利計算/2つの比較

mochiii__3

総合スコア3

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/01/13 05:00

puthonを用いて、単利・複利計算をし、さらにその比較をするプログラムを作成したいです

元⾦、利率,期間(年数)をキーボード⼊⼒し、①その年数後の単利の残⾼、複利の残⾼のそれぞれを出⼒し、②その年数以内に複利の残⾼は単利の残⾼を上回っているかを出⼒し、③上回るならば何年⽬かを出⼒する

以上の3項目を出力するプログラムをpythonにて作成したいです。

一通りプログラムは完成したのですが、③の年数を出力する時に、year_list[0]を使ったのですが、その他の方法があれば教えていただきたいです。
(具体的には →  if fukuri > tanri: print("複利の残高は単利の残高を",year_list[0],"年目から上回っている。")の部分です  )

また、その他の部分でも改良できる点がありましたら教えていただけると幸いです。

python

1import math 2year=int (input("年数を入力してください:")) 3capital=int (input("元金を入力してください:")) 4rate=float (input("利息を%で入力してください:")) 5 6R=rate/100 7X=capital*R 8i=0 9capital2=capital 10year_list=[] 11 12while (i<year): 13 i+=1 14 risoku=i*X 15 tanri=capital+risoku 16 tanri = math.floor (tanri) 17 18 risoku=capital2*R 19 capital2=capital2+risoku 20 capital2= math.floor (capital2) 21 22 if capital2 > tanri: 23 year_list.append(i) 24 25print("単利の残高は",tanri,"円") 26fukuri=capital2 27print("複利の残高は",fukuri,"円") 28if fukuri > tanri: 29 print("複利の残高は単利の残高を",year_list[0],"年目から上回っている。") 30else: 31 print("複利の残⾼は単利の残⾼を上回っていない。")

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

無理に変えなくても良さそうですが。あえてやるならこの程度…? 読みやすくなってると良いですが。
・謎の変数XとRを削除
・謎に使い回されている変数risokuを消した
・year_listの廃止要望があったので、fukuri_winを用いてコントロール
・while文は扱いづらいのでfor文にした
あと、コード外の話ですがfukuri = math.floor(fukuri)福利計算って、毎年切り捨てしたらまずいんじゃないですか? 詳しくはないですが。

python3

1import math 2year = int(input("年数を入力してください:")) 3capital = int(input("元金を入力してください:")) 4rate = float(input("利息を%で入力してください:"))/100 5fukuri = tanri = capital 6fukuri_win = False 7 8for i in range(1, year+1): 9 tanri += capital*rate 10 tanri = math.floor(tanri) 11 12 fukuri += fukuri*rate 13 fukuri = math.floor(fukuri) 14 15 if (fukuri > tanri) & (not fukuri_win): 16 fukuri_win = True 17 year_w = i 18 19print("単利の残高は",tanri,"円") 20print("複利の残高は",fukuri,"円") 21if fukuri_win: 22 print("複利の残高は単利の残高を",year_w,"年目から上回っている。") 23else: 24 print("複利の残⾼は単利の残⾼を上回っていない。")

追記

fukuri_winはそのまんま、複利残高のほうが勝ってるかどうかくらいのイメージの変数名です。わかりにくかったら、まあ私のネーミングセンスのせいです…

python3

1 if (fukuri > tanri) & (not fukuri_win): 2 fukuri_win = True 3 year_w = i

上記でif (fukuri > tanri) & (not fukuri_win): は、(fukuri > tanri)と(not fukuri_win)が両方Trueのときだけ動く条件文です。つまり、複利残高>単利残高かつ、fukuri_win=Falseのときですね。
一度動くとfukuri_winはTrueになるので、2回目以降は発動しません。また、最初の勝利年度をyear_wとしています。

python3

1if fukuri_win: 2 print("複利の残高は単利の残高を",year_w,"年目から上回っている。")

ここはそのまま、複利が勝ったことがあればTrueですから、printされます。

投稿2021/01/13 06:33

編集2021/01/13 07:01
jeanbiego

総合スコア3966

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mochiii__3

2021/01/13 06:51

回答ありがとうございます。こんなにコンパクトにできるのかと驚きました。pythonは学校の授業で習っており資料をみながら作成したのですが正直よくわかっていない部分もあり、お手数ですが、こちらのプログラムの解説を追記してくださいませんか?特に「fukuri_winを用いてコントロール」の部分がgoogleで検索しても出てこなかったので教えていただきたいです。
jeanbiego

2021/01/13 07:02

追記しました。
mochiii__3

2021/01/14 01:43 編集

追記ありがとうございます。「fukuri = tanri = capital」はcapitalとして入力されたものがtanriに入り、そこで計算されたものがfukuriに入るという理解で合っていますか?また、「fukuri_win = False」の部分は始めてみた形なのですが、調べるとブール値と出てきて、これは③を実行するために、導入したもので、falseをtrueに変えることを目的としたものですか?
jeanbiego

2021/01/14 02:19

・「fukuri = tanri = capital」これは単に、「fukuri = capital」「tanri = capital」と2行書くのと同じで、両方にcapitalを代入しているだけです。下記URLの「複数の変数に同じ値を代入」の項をみてみてください。 https://note.nkmk.me/python-multi-variables-values/ ・”「fukuri_win = False」の部分は始めてみた形なのですが、調べるとブール値と出てきて、これは③を実行するために、導入したもので、falseをtrueに変えることを目的としたものですか?” その通りです。数値や文字列でも良かったのですが、if文の条件にそのまま使えるメリットがあったのでbool値にしました。
mochiii__3

2021/01/14 02:58

ご丁寧にありがとうございました。とてもわかりやすかったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問