|
2 | 2 | mortgage.py |
3 | 3 | """ |
4 | 4 |
|
5 | | -PRINCIPAL = 500000.0 |
6 | | -RATE = 0.05 |
7 | | -PAYMENT = 2684.11 |
8 | | -CURRENT_PAYMENT = 0.0 |
9 | | -EXTRA_PAYMENT = 1000.0 |
10 | | -EXTRA_PAYMENT_START_MONTH = 60 |
11 | | -EXTRA_PAYMENT_END_MONTH = 108 |
12 | | -TOTAL_PAID = 0.0 |
13 | | -MONTHS_PAID = 0 |
| 5 | +PRINCIPAL: float = 500000.0 |
| 6 | +RATE: float = 0.05 |
| 7 | +PAYMENT: float = 2684.11 |
| 8 | +CURRENT_PAYMENT: float = 0.0 |
| 9 | +EXTRA_PAYMENT: float = 1000.0 |
| 10 | +EXTRA_PAYMENT_START_MONTH: int = 60 |
| 11 | +EXTRA_PAYMENT_END_MONTH: int = 108 |
| 12 | +TOTAL_PAID: float = 0.0 |
| 13 | +MONTHS_PAID: int = 0 |
14 | 14 |
|
15 | | -def print_payment_history(months_paid, current_payment, total_payment, principal): |
| 15 | +def print_payment_history( |
| 16 | + months_paid: int, |
| 17 | + current_payment: float, |
| 18 | + total_payment: float, |
| 19 | + principal: float |
| 20 | +) -> None: |
16 | 21 | """ |
17 | 22 | print_payment_history formats arguments, rounds each argument to two decimals |
18 | 23 | and prints themt to the console. |
19 | 24 | """ |
20 | 25 | print( |
21 | | - round(months_paid, 2), |
| 26 | + months_paid, |
22 | 27 | round(current_payment, 2), |
23 | 28 | round(total_payment, 2), |
24 | 29 | round(principal, 2) |
25 | 30 | ) |
26 | 31 |
|
27 | 32 | while PRINCIPAL > 0: |
| 33 | + CURRENT_PAYMENT = PAYMENT |
28 | 34 | MONTHS_PAID = MONTHS_PAID + 1 |
29 | 35 |
|
| 36 | + # Make extra payments between months 60 and 108 |
| 37 | + if EXTRA_PAYMENT_START_MONTH <= MONTHS_PAID <= EXTRA_PAYMENT_END_MONTH: |
| 38 | + CURRENT_PAYMENT = PAYMENT + EXTRA_PAYMENT |
| 39 | + |
| 40 | + # Last payment should be principal only (no interest) and break out immediately |
30 | 41 | if PRINCIPAL < PAYMENT: |
31 | 42 | CURRENT_PAYMENT = PRINCIPAL |
32 | 43 | TOTAL_PAID = TOTAL_PAID + PRINCIPAL |
33 | 44 | PRINCIPAL = 0 |
34 | 45 | break |
35 | 46 |
|
36 | | - if EXTRA_PAYMENT_START_MONTH <= MONTHS_PAID <= EXTRA_PAYMENT_END_MONTH: |
37 | | - CURRENT_PAYMENT = PAYMENT + EXTRA_PAYMENT |
38 | | - else: |
39 | | - CURRENT_PAYMENT = PAYMENT |
40 | | - |
41 | 47 | TOTAL_PAID = TOTAL_PAID + CURRENT_PAYMENT |
42 | 48 | PRINCIPAL = PRINCIPAL * (1 + RATE / 12) - CURRENT_PAYMENT |
43 | 49 | print_payment_history(MONTHS_PAID, CURRENT_PAYMENT, TOTAL_PAID, PRINCIPAL) |
|
0 commit comments