質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

Q&A

解決済

1回答

1951閲覧

リボ払いを計算するプログラムでマイナスが出る

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

0グッド

0クリップ

投稿2019/04/14 09:17

編集2019/04/14 18:47

質問事項

リボ払いでのひと月の支払総額,元本支払額,金利支払額,支払残高(前後2つ)を計算するコードを書いているのですが、最終月の支払残高がマイナスになってしまいます。
if文を付けてみたりと試してはみたのですが上手くいきません。
どこをどう書き換えればよいのでしょうか?

コード

# リボ払いでの支払額の計算 DISCOUNT = 0.1 # 会員向けの割引 ANNUAL_INTEREST_RATE = 0.12 # 年利 MONTHLY_INTEREST_RATE = ANNUAL_INTEREST_RATE / 12 # 月利換算 MONTHLY_PAYMENT_RATE = 0.05 # ひと月の支払額の割合 original_price = float(input('Enter the purchase price: ')) #購入の総額 discounted_price = original_price * (1 - DISCOUNT) # 初月引き落とし前の支払残高 month = 1 starting = discounted_price # 元本支払残高(ひと月支払前) monthly_payment = discounted_price * MONTHLY_PAYMENT_RATE # ひと月の支払総額 interest = discounted_price * MONTHLY_INTEREST_RATE # ひと月の金利支払額 principal = monthly_payment - interest # ひと月の元本支払額 remaining = starting - principal # 元本支払残高(ひと月支払後) print() print('Month Starting Balance Interest to Pay \ Principal to Pay Payment Ending Balance') # 初月の支払い情報を表示 print(f'{month:>2}\t{starting:.2f}\t{interest:.2f}\t{principal:.2f}\t{monthly_payment:.2f}\t{remaining:.2f}') # 2ヶ月目以降の支払い情報を表示 while remaining >= 0: month += 1 starting = remaining interest = starting * MONTHLY_INTEREST_RATE principal = monthly_payment - interest remaining = starting - principal print(f'{month:>2}\t{starting:.2f}\t{interest:.2f}\t{principal:.2f}\t{monthly_payment:.2f}\t{remaining:.2f}')

理想と現実

理想

Enter the purchase price: 200

Month Starting Balance Interest to Pay Principal to Pay Payment Ending Balance
1 180.00 1.80 7.20 9.00 172.80
2 172.80 1.73 7.27 9.00 165.53
3 165.53 1.66 7.34 9.00 158.18
4 158.18 1.58 7.42 9.00 150.77
5 150.77 1.51 7.49 9.00 143.27
6 143.27 1.43 7.57 9.00 135.71
7 135.71 1.36 7.64 9.00 128.06
8 128.06 1.28 7.72 9.00 120.34
9 120.34 1.20 7.80 9.00 112.55
10 112.55 1.13 7.87 9.00 104.67
11 104.67 1.05 7.95 9.00 96.72
12 96.72 0.97 8.03 9.00 88.69
13 88.69 0.89 8.11 9.00 80.57
14 80.57 0.81 8.19 9.00 72.38
15 72.38 0.72 8.28 9.00 64.10
16 64.10 0.64 8.36 9.00 55.74
17 55.74 0.56 8.44 9.00 47.30
18 47.30 0.47 8.53 9.00 38.77
19 38.77 0.39 8.61 9.00 30.16
20 30.16 0.30 8.70 9.00 21.46
21 21.46 0.21 8.79 9.00 12.68
22 12.68 0.13 8.87 9.00 3.80
23 3.80 0.00 3.80 3.80 0.00

現実

Enter the purchase price: 200
(途中省略)
21 21.46 0.21 8.79 9.00 12.68
22 12.68 0.13 8.87 9.00 3.80
23 3.80 0.04 8.96 9.00 -5.16

追記

# 2ヶ月目以降の支払い情報を表示 while monthly_payment <= remaining: month += 1 starting = remaining interest = starting * MONTHLY_INTEREST_RATE principal = monthly_payment - interest remaining = starting - principal print(f'{month:>2}\t{starting:.2f}\t{interest:.2f}\t{principal:.2f}\t{monthly_payment:.2f}\t{remaining:.2f}') # 以降、追記 # 1か月の支払額と支払残高を比較して残高が支払額以下になったら処理を分岐 if monthly_payment >= remaining: month += 1 starting = remaining interest = 0 # alt: starting * MONTHLY_INTEREST_RATE principal = starting monthly_payment = starting # alt: + interest remaining = 0 print(f'{month:>2}\t{starting:.2f}\t{interest:.2f}\t{principal:.2f}\t{monthly_payment:.2f}\t{remaining:.2f}')

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

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

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

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

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

guest

回答1

0

ベストアンサー

1か月の支払額と支払残高を比較して残高が支払額以下になったら処理を分岐すれば良いと思います。

投稿2019/04/14 10:42

javahack

総合スコア1088

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

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

退会済みユーザー

退会済みユーザー

2019/04/14 18:47

アドバイスを受けて、追記のように書き加えたところ上手くいきました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問