I want to use bisection search to find out how much monthly payment should be in order to pay the full amount of balance within 12 months which user will input. However, this code I write goes into the infinite loop,showing "low, high, montlyPayment infinite times." I don't know which code causes this problem since conditional statement seems right to me .
initialBalance = float(raw_input('Enter the outstanding balance on your           credit card'))
annualInterestrate = float(raw_input('Enter the annual credit card  interest rate as a decimal'))
monthlyInterestrate = round(annualInterestrate, 2)
balance = initialBalance
while balance > 0:
    numMonth = 0
    balance = initialBalance
    low = balance/12.0
    high = (balance*(1+(annualInterestrate/12.0))**12.0)/12.0
    epsilon = 0.01
    monthlyPayment = round((high + low)/2.0, 2)
    while abs(monthlyPayment*12.0 - initialBalance) >= epsilon:
        print 'low =', low, 'high =', high, 'monthlyPayment =', round(monthlyPayment,2)
        if monthlyPayment*12.0 < balance:
            low = monthlyPayment
        else:
            high = monthlyPayment
        monthlyPayment = round((high + low)/2.0, 2)
        while balance > 0 and numMonth < 12:
            numMonth += 1
            interest = monthlyInterestrate * balance
            balance -= monthlyPayment
            balance += interest
balance = round(balance, 2)
print 'RESULT'
print 'monthly payment to pay off debt in 1 year:', monthlyPayment
print 'Number of months needed:', numMonth
print 'Balance:',balance
 
    