2016-09-27 4 views
-3

이것은 신용 카드 잔액을 계산하기 위해 만든 프로그램입니다. 대부분의 입력에 적용되지만 balance이 너무 커지면 프로그램이 무한 루프를 실행합니다. 더 큰 값을 계산하도록 코드를 개선하기 위해 수행 할 수있는 작업은 무엇입니까? whileFalse 될의큰 값으로 인해이 프로그램에서 무한 루프가 발생하는 이유는 무엇입니까?

monthlyPayment = 0 

monthlyInterestRate = annualInterestRate /12 
newbalance = balance 
month = 0 

while newbalance > 0: 
    monthlyPayment += .1 
    newbalance = balance 

    for month in range(1,13): 
     newbalance -= monthlyPayment 
     newbalance += monthlyInterestRate * newbalance 
     month += 1 
print("Lowest Payment:" + str(round(monthlyPayment,2))) 
+0

우리는 여전히 'annualInterestRate'의 값을 모른다. – heltonbiker

답변

4
while newbalance > 0: 
    monthlyPayment += .1 
    newbalance = balance 

여기에 문제가 있습니다. balance이 0보다 큰 경우 newbalance은 항상 balance으로 재설정되며 while 루프는 true로 평가되고 무한 루프가 발생합니다.

+0

'newbalance'는'for' 루프 내에서 수정되므로 음의 값을 가질 가능성이 있습니다. 그것은'- ='연산이 다음의'+ ='연산보다 더 많이 newbalance를 감소시킬 것인지 아닌지에 달려있다. – heltonbiker

+0

@Corgs 'balance'의 값이 보통 일 때 코드가 제대로 작동하는 이유는 무엇입니까? (너무 크지 않은 숫자)? 왜 많은 수가 오작동을 일으키는 지 내 마음에 이해가 가지 않습니다. – EllaP

+0

은 @heltonbiker와 마찬가지로'monthlypayment'가'balance'보다 크거나 합계가'newbalance'보다 큰 경우 for 루프 내부에서'- ='를하고 있기 때문에 while 루프의 조건이 실패합니다. 더 큰 숫자로는 * 일어날 수 없다는 말은 아닙니다. – Corgs

0

당신은 시험 조건을 확인해야합니다. newbalance > 0이므로 결국 양수 값을 가진 for 루프에서 나타납니다.

+0

돈이 너무 많이 나가거나 이자율이 너무 낮아 보인다. o) – heltonbiker

+0

테스트 조건은'거짓 '이되어야한다. 루프가 'True'인 동안 반복됩니다. – Barmar

+0

@Barmar 감사합니다. 나는 실수를 바로 잡았습니다. – heltonbiker

관련 문제