質問事項
リボ払いでのひと月の支払総額,元本支払額,金利支払額,支払残高(前後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}')
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/04/14 18:47