Why am I printing different values?

What’s different between lines 16 and 17?

#user input
annual_salary = float(input("Enter your annual salary: "))
portion_saved = float(input("Enter the percent of your salary to save, as a decimal: "))
total_cost = float(input("Enter the cost of your dream home: "))

#static vars
portion_down_payment = total_cost*.25
monthly_salary = annual_salary/12
r = .04 #annual rate of return

months_to_save = 0
current_savings = 0
investment_return = current_savings * r / 12

while current_savings < portion_down_payment:
    #current_savings += (current_savings * r / 12) + (portion_saved * monthly_salary)   # Line 16
    current_savings += (investment_return) + (portion_saved*monthly_salary)   # Line 17
    months_to_save += 1
    
print("Number of months: ", months_to_save)

I tried running it through pythontutor and the variation happens on step 15 of execution, but I can’t quite figure out what’s different.

Answer

When you use current_savings += investment_return, it adds the same amount of interest to current_savings each time through the loop. That interest is equal to current_savings * r / 12 calculated before you started the loop.

But when you use current_savings += (current_savings * r / 12), you recalculate the interest each time through the loop. So the interest is calculated based on the current value of current_savings, which gets bigger each time the loop runs.

In other words, the first one calculates simple interest, and the second one calculates compound interest.