Calculating balance and monthly payments in Python loop
Solution 1
The problem in your algorithm was that monthly payment was calculated based on the new balance.
A few points about your Python code:
1- use underlines instead of camelCase when coding in python
2- make use of string formatting instead of str() when printing
3- for is a better choice than while here
4- no need to overuse parenthesis when they are not needed
balance = 4213
annual_interest_rate = 0.2
monthly_payment_rate =0.04
monthly_interest_rate = annual_interest_rate / 12
monthly_payment = monthly_payment_rate * balance
new_balance= (balance - monthly_payment) * (1 + monthly_interest_rate)
for month in range(1, 13):
monthly_payment = monthly_payment_rate * balance
balance = (balance - monthly_payment) * (1 + monthly_interest_rate)
print('Month: %d \n Minimum monthly payment: %g \n Remaining balance: %g'\
% (month, round(monthly_payment, 2), round(balance,2)))
Solution 2
Consider the order of the statements in the while loop.
Solution 3
Your monthly payment is one month off.
In your calculation, the monthly payment (monthlyPayment
) is calculated based on the new balance (newBalance
) or after you made the payment.
Admin
Updated on June 04, 2022Comments
-
Admin almost 2 years
balance = 4213 annualInterestRate = 0.2 monthlyPaymentRate =0.04 monthInterestRate = annualInterestRate / 12 monthlyPayment = (monthlyPaymentRate*balance) newBalance= (balance-monthlyPayment) * (1 + monthInterestRate) month = 0 while month < 12: month += 1 newBalance=(balance-monthlyPayment)*(1 + monthInterestRate) balance = newBalance monthlyPayment = (monthlyPaymentRate*newBalance) print ("Month: " + str(month)) print ("Minimum monthly payment: " + str(round(monthlyPayment,2))) print ("Remaining balance: " + str(round(newBalance, 2)))
So, I have the code above and I'm trying to make it display the below output:
Month: 1 Minimum monthly payment: 168.52 Remaining balance: 4111.89 Month: 2 Minimum monthly payment: 164.48 Remaining balance: 4013.2 Month: 3 Minimum monthly payment: 160.53 Remaining balance: 3916.89 Month: 4 Minimum monthly payment: 156.68 Remaining balance: 3822.88 Month: 5 Minimum monthly payment: 152.92 Remaining balance: 3731.13 Month: 6 Minimum monthly payment: 149.25 Remaining balance: 3641.58 Month: 7 Minimum monthly payment: 145.66 Remaining balance: 3554.19 Month: 8 Minimum monthly payment: 142.17 Remaining balance: 3468.89 Month: 9 Minimum monthly payment: 138.76 Remaining balance: 3385.63 Month: 10 Minimum monthly payment: 135.43 Remaining balance: 3304.38 Month: 11 Minimum monthly payment: 132.18 Remaining balance: 3225.07 Month: 12 Minimum monthly payment: 129.0 Remaining balance: 3147.67 Total paid: 1775.55 Remaining balance: 3147.67
And for some reason I keep getting the below result instead of the above... Can someone please point me to what I'm doing wrong? Thank you very much!
Month: 1 Minimum monthly payment: 164.48 Remaining balance: 4111.89 Month: 2 Minimum monthly payment: 160.53 Remaining balance: 4013.2 Month: 3 Minimum monthly payment: 156.68 Remaining balance: 3916.89 Month: 4 Minimum monthly payment: 152.92 Remaining balance: 3822.88 Month: 5 Minimum monthly payment: 149.25 Remaining balance: 3731.13 Month: 6 Minimum monthly payment: 145.66 Remaining balance: 3641.58 Month: 7 Minimum monthly payment: 142.17 Remaining balance: 3554.19 Month: 8 Minimum monthly payment: 138.76 Remaining balance: 3468.89 Month: 9 Minimum monthly payment: 135.43 Remaining balance: 3385.63 Month: 10 Minimum monthly payment: 132.18 Remaining balance: 3304.38 Month: 11 Minimum monthly payment: 129.0 Remaining balance: 3225.07 Month: 12 Minimum monthly payment: 125.91 Remaining balance: 3147.67
-
Lee Taylor about 11 yearsPlease explain your answer.
-
Adam Gent about 10 yearsAlthough it works for the given numbers that monthly interest rate calculation could cause rounding errors. Use decimals datatypes when dealing with money.