Мне нужно написать код для поиска минимального ежемесячного платежа по кредитной карте. Я использую поиск пополам, чтобы найти этот минимальный ежемесячный платеж. Однако меня смущает вопрос о том, как выйти из цикла 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
Это код, который у меня есть.