我碰巧找到了这段代码,似乎运行良好。令人惊讶的是,(通过检查,麻省理工学院课程)它只有在年利率为0.15时才会失败,对其他情况来说是可以的。我是一个新手,所以我今天没有任何希望解决它,但如果有人能就这个问题给我一些启示,我将非常感激!
balance=294272
annualInterestRate=0.15
payment=(balance * (1 + annualInterestRate/12)**12) / 12
count=0
total=0
inicialbalance=balance
while balance>0:
for month in range(1,13):
interest=(balance-payment)*(annualInterestRate/12)
balance=(balance-payment)*(1+(annualInterestRate/12))
total=total+payment
finalbalance=balance-total
if balance <=0:
print('Balance Paid Off @ '+str(round(payment,2)) + ' Total Paid is: '+str(round(total,2))+ ' ending balance: ' +str(round(balance,2)))
print('Lowest Payment: ' + str(round(payment,2)))
break
if balance <-0.01 or balance >0.01:
print('Payment at ' + str(payment) + ' ending balance : ' + str(balance))
print('Payment will adjust to: ' + str(payment + 10))
payment=payment+(balance/12)
count=count+1
balance=inicialbalance
total=0
#if count >200:
#print('count is > ' +str(count)+ ' aborting')
#break
#if balance <=0:
#print('balance paid off at ' + str(payment) + ' after ' + str(mth))
print('Lowest Payment: ' + str(round(payment,2)))`
结果:
{Balance Paid Off @ 42279.71 Total Paid is: 465076.8 ending balance: -359.78
Lowest Payment: 42279.71
Payment at 42279.7094717 ending balance : -359.781977705
Payment will adjust to: 42289.7094717
Balance Paid Off @ 42249.73 Total Paid is: 464747.0 ending balance: -4.19
Lowest Payment: 42249.73
Payment at 42249.7276402 ending balance : -4.18662043777
Payment will adjust to: 42259.7276402
Balance Paid Off @ 42249.38 Total Paid is: 464743.17 ending balance: -0.05
Lowest Payment: 42249.38
Payment at 42249.3787552 ending balance : -0.0487178117574
Payment will adjust to: 42259.3787552
Balance Paid Off @ 42249.37 Total Paid is: 464743.12 ending balance: -0.0
Lowest Payment: 42249.37
balance paid off at 42249.3746954 after 11
Lowest Payment: 42249.37}
答案 0 :(得分:1)
我认为条件
if balance <=0:
break
for month in range(1,13):
内的是错误的。 如果付款太大以至于11次付款而非12次付款后余额变为负值,则循环会过早中断。我认为这是42249.37的过度支付所发生的事情。
balance = 437092
annualInterestRate = 0.15
payment=(balance * (1 + annualInterestRate/12)**12) / 12
count=0
total=0
inicialbalance=balance
while balance>0:
for month in range(1,13):
interest=(balance-payment)*(annualInterestRate/12)
balance = (balance-payment) + interest
total += payment
finalbalance = balance-total
if balance <-0.01 or balance>0.01:
print('Payment at ' + str(payment) + ' ending balance : ' + str(balance))
payment=payment+(balance/12)
print('Payment will adjust to: ' + str(payment))
count=count+1
balance=inicialbalance
else:
break
total=0
print('Lowest Payment: ' + str(round(payment,2)))
产量
Payment at 42279.7094717 ending balance : -43172.4850925
Payment will adjust to: 38682.0023807
Payment at 38682.0023807 ending balance : 3673.67604215
Payment will adjust to: 38988.1420508
Payment at 38988.1420508 ending balance : -312.604095728
Payment will adjust to: 38962.0917095
Payment at 38962.0917095 ending balance : 26.6004186392
Payment will adjust to: 38964.3084111
Payment at 38964.3084111 ending balance : -2.26350928031
Payment will adjust to: 38964.1197853
Payment at 38964.1197853 ending balance : 0.192608783082
Payment will adjust to: 38964.1358361
Payment at 38964.1358361 ending balance : -0.0163896580426
Payment will adjust to: 38964.1344702
Lowest Payment: 38964.13