Calculating balance and monthly payments in Python loop

12,625

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.

Share:
12,625
Admin
Author by

Admin

Updated on June 04, 2022

Comments

  • Admin
    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
    Lee Taylor about 11 years
    Please explain your answer.
  • Adam Gent
    Adam Gent about 10 years
    Although it works for the given numbers that monthly interest rate calculation could cause rounding errors. Use decimals datatypes when dealing with money.