Как выйти из цикла while, когда баланс равен нулю и, следовательно, полностью оплачен? - PullRequest
0 голосов
/ 18 июня 2019

Мне нужно написать код для поиска минимального ежемесячного платежа по кредитной карте. Я использую поиск пополам, чтобы найти этот минимальный ежемесячный платеж. Однако меня смущает вопрос о том, как выйти из цикла while, поскольку он, похоже, создает бесконечный цикл и никогда не обращается к имеющемуся у меня оператору break, означающему, что баланс никогда не равен нулю. Как выйти из цикла while?

Я понимаю, что установка баланса в initBalance сбрасывает баланс и, следовательно, создает бесконечный цикл, поскольку баланс всегда больше нуля. Однако именно поэтому у меня есть оператор перерыва, когда баланс = 0, это означает, что баланс был полностью оплачен, и мы можем выйти из цикла. Однако я не думаю, что компилятор когда-либо обращается к оператору break.

def minPayment(balance, annualInterestRate):
     '''
     balance: the outstanding balance on the credit card
     annualInterestRate: annual interest rate as a decimal

     returns: lowest monthly payment that will pay off all debt in under
     one year
     '''
     monthlyInterestRate = annualInterestRate / 12.0
     low = balance/12.0
     high = (balance * (1 + monthlyInterestRate)**12)/12.0
     payment = (low + high)/2.0
     initBalance = balance

     while(balance > 0):
         for i in range(12):
             balance = balance - payment + ((balance - payment) * monthlyInterestRate)
         if(balance < 0):
             high = payment
         elif(balance > 0):
             low = payment
         else:
             break
         payment = (low + high)/2.0
         balance = initBalance

Это код, который у меня есть.

...