2013-02-25 91 views
1

我的代码给出正确的结果,除了balance = 3926。最低支付金额:370,而应该是360.程序应该按照给定的年利率打印最低月付款。给定初始余额,代码应该在年底计算余额。我们正在尝试每月支付10美元的初始余额。如果年底余额有余额,我们会编写代码将余额重置为初始余额,将付款额增加10美元,然后再次尝试(使用相同的代码!)以计算余额这一年,看看这个新的支付值足够没有得到正确的输出...逻辑正确

annualInterestRate = 0.2 

balance = 3926 

monthlyinterestrate = annualInterestRate/12.0 

remainingBalance = balance 

month = 1 
total = 0 

payment = 10 

def CheckMinimumPayment(payment,balance): 

    "Checking if payment is in correct balance" 
    while(payment*12 < balance): 

     payment += 10 
    return payment 

payment = CheckMinimumPayment(payment,balance) 

while(month <= 12): 
    remainingBalance = remainingBalance - payment + (annualInterestRate/12.0) * (remainingBalance - payment) 
    month += 1 
    total += payment 


payment = CheckMinimumPayment(payment,total+remainingBalance) 

print("Lowest Payment: " + str(payment)) 
+1

而*为什么*是360不正确?计算结果是什么,你能为我们解决这个问题吗? – 2013-02-25 16:47:59

+1

发布时,请确保将您的代码放入代码块(这是“{}”按钮)。我是第二个为你解决它的人。 – n00dle 2013-02-25 16:50:12

+0

根据程序的回答是370,但它应该是360 – user1437027 2013-02-25 16:51:00

回答

0

大的问题是,你不会再迭代通过兴趣环路(你有什么作为while(month <= 12))每次尝试新的付款时间。将该循环写入一个函数,并在每次尝试新付款时调用它。欠款余额取决于付款情况,因为每个月的较大付款意味着每月增加的利息较少。这是我用的:

annualInterestRate = 0.2 
init_balance = 3926 

monthlyInterestRate = annualInterestRate/12.0 
init_payment = 10 

def owedBalance(payment,balance): 
    """ Calculate total owed balance after one year 
     given an initial balance and montly payment""" 

    for month in range(12): 
     balance = (balance - payment) * (monthlyInterestRate + 1) 

    return payment*12 + balance 

def CheckMinimumPayment(payment,balance): 
    "Checking if payment is in correct balance" 

    while (payment*12 < owedBalance(payment, balance)): 
     payment += 10 

    return payment 

min_payment = CheckMinimumPayment(init_payment,init_balance) 

print("Lowest Payment: {}".format(min_payment))