나는 이분법을 사용하여 12 개월 만에 대출금을 지불해야하는 정확한 지불액을 찾기 위해 코드를 만들어야합니다. 내가 작성한 코드는 작동하지만 타겟을 오버 슛합니다. 대출은 12 개월 내에 상환되지만 12 회 지불 후 최종 잔액은 약 0이되어야합니다. 그러나 그것은 더 큰 음수가되는 방법입니다.Python Bisection 검색 overshoots 대상
StartBalance = float(raw_input('Credit Balance in $: '))
AnnualRate = float(raw_input('Annual interest rate in decimals: '))
MonthlyRate = AnnualRate/12.0
MinPaymentLow = StartBalance/12.0
MinPaymentHigh = (StartBalance*(1+MonthlyRate)**12.0)/12.0
cent = 0.01
Payment = (MinPaymentHigh+MinPaymentLow)/2.0
while (Payment*12-StartBalance) >= cent:
for month in range(0, 12):
Balance = (StartBalance-Payment)/10*(1+MonthlyRate)
if Balance < 0:
MinPaymentLow = Payment
elif Balance > 0:
MinPaymentHigh = Payment
Payment = (MinPaymentHigh + MinPaymentLow)/ 2.0
print 'RESULT'
print 'Number of months needed: 12'
print 'Montly pay: $', round(Balance,2)
생산하는 가치가 올바른지 어떻게 테스트하고 있습니까? 당신이 테스트하고있는 것보다 다른 대출 /이자 계산을 사용하고있는 것 같습니다. – James
테스트 코드를 작성하지는 않았지만 온라인 채무 계산기를 사용하여 수동으로 점검했습니다. 문제는 매달 예를 들어 $ 150를 지불하고, 마지막 달에 50 달러의 빚을지게되지만 $ 150를 지불하게됩니다. 이로 인해 계정 잔고는 $ 100 (또는 0에 가까워 야 함) 인 반면 $ 100입니다. – Pim
while 루프에 대해 다른 조건을 만들고 if 및 elif 문을 (balance <0 및 balance <-cent) 및 그 반대의 경우로 설정하여 문제를 해결했습니다. 그래도 도움을 주셔서 감사합니다. – Pim