用于循环+递归循环的初学者python困难

时间:2018-06-12 16:08:11

标签: python

我收到了:

  

RecursionError:比较超出最大递归深度

在第一个定义中的for循环上。

我不知道发生了什么或我做错了什么。任何帮助将不胜感激。

我的代码:

initialbudget=3329
annualInterestRate=0.2
flat= 50
def formula(flat):
    '''
    input flat rate
    return low or correct
    '''
    balance=initialbudget
    for i in range(1, 13):
        balance=(balance-flat)*(1+annualInterestRate/12.0)
    if balance==0:
        return ('correct')
    elif balance>0:
        return ('low')



def rateFinder(initialbudget):
    '''
    input starting balance
    return Flat rate needed to pay off balance in 12 months
    '''
    flat=0 
    while formula(flat) != ('high'):
        if formula(flat)==('correct'):
            return('Lowest Payment:'+ ' ' + str(flat))
        else:
            flat+=10
            return(rateFinder(flat))

print(rateFinder(initialbudget))

2 个答案:

答案 0 :(得分:0)

第一个问题是rateFinder中的行flat=0。当formula()返回('low')时,它使用更新的flat值调用rateFinder,然后将flat设置回0.因此ratefInder应如下所示:

def rateFinder(initialbudget, flat):
    '''
    input starting balance
    return Flat rate needed to pay off balance in 12 months
    '''
    while formula(flat) != ('high'):
        if formula(flat)==('correct'):
            return('Lowest Payment:'+ ' ' + str(flat))
        else:
            flat+=10
            return(rateFinder(initialbudget, flat))

修复了这个并将print flat, balance放在公式()中的for循环之后,你会发现答案在300到310之间。所以你需要改进你的验收标准。

答案 1 :(得分:0)

annualInterestRate=0.2  
balance=320000

ib=balance
air=annualInterestRate
flat=-10

while balance !=0:
    flat+=10
    month=1
    balance=ib
    while month<=12:
        balance=(balance-flat)*(1+air/12.0)
        month+=1
    if balance<0:
        print('Lowest Payment:',round(flat, 2))
        break