2014-09-09 5 views
0

Код ниже не работает, и я очень расстроен. Я знаю, что правильный результат должен быть $ 310, но каким-то образом мой код не добирается. Это домашняя работа для введения курса edex для CS и python. Я попытался прокомментировать то, что, по моему мнению, делает код, но ясно, что я не прав.Домашнее задание Вопросы Python

Любая помощь или подсказки были бы очень оценены.

balance = 3329 
annualInterestRate = 0.2 
monthInterest = annualInterestRate/12.0 

# simple payment for the month 
monthlyPaymentRate = 10 

# while this is true, run the for loop from 1 - 12. This loop will break if the balance gets <  0, otherwise the 
# monthly payment rate adds by 10 each year. 
while True: 
    for month in range(1, 13): 
     balance = balance - monthlyPaymentRate 
     interestBalance = balance + (monthInterest*balance) 
     balance = interestBalance 
     if balance < 0: 
      break 
     else: 
      monthlyPaymentRate += 10 

print "balance = " + str(balance) 
print "annualInterestRate = " + str(annualInterestRate) 

print"Lowest payment: " + str(monthlyPaymentRate) 
+0

Дайте нам некоторую информацию о конкретной проблеме. В чем проблема, которую вы пытаетесь решить? – Mehraban

+3

'break' влияет на ближайший замкнутый цикл (в этом случае' for') - вы никогда не избегаете 'while'. Измените свою логику. –

+1

Вы «ломаете» из внутреннего цикла 'for', но вы никогда не выходите из внешнего цикла while. Измените свое условие с 'while True' на' while balance> = 0', и он должен хотя бы запустить. – Blender

ответ

1

Большое спасибо за комментарии, я был в состоянии настроить свой код, чтобы получить соответствующие результаты, сделав функцию, что означало, я мог проверить результаты расчета оплаты в течение года , верните результат, и если этот результат не был тем, что я хотел бы, повторите код в цикле while. Трудный бизнес - это научиться кодировать, но довольно весело.

Любые мысли о чистоте или эффективности были бы очень желанными, вполне уверенными, что это не самый эффективный шаг.

balance = 4400 
annualInterestRate = 0.18 
monthInterest = annualInterestRate/12.0 

# simple payment for the month 
monthlyPaymentRate = 0 

# while the balance is greater than zero, run the for loop from 1 - 12. This loop will break if 
# the balance gets <=0, otherwise the monthly payment rate adds by 10 each year. 
while balance > 0: 
    monthlyPaymentRate += 10 
    def testBalance(balance, monthlyPaymentRate): 
     for month in range(1, 13): 
      balance = balance - monthlyPaymentRate 
      interestBalance = balance + (monthInterest*balance) 
      balance = interestBalance 
     return balance 

    if testBalance(balance, monthlyPaymentRate) <= 0: 
     break 

print"Lowest Payment: " + str(monthlyPaymentRate) 
+0

Более питоновский способ вывода на печать и избежания добавления пробелов внутри цитат будет выглядеть следующим образом: 'print" Lowest Payment: ", monthPaymentRate' или' print "Самый низкий платеж:% s"% monthPaymentRate' – jkdba

+0

Также определите свою функцию или метод _testBalance_ за пределами цикла while, который тратит ресурсы заново, переопределяя одну и ту же функцию снова и снова внутри цикла. – jkdba

+0

также попробуйте подход, подобный [this] (http://codepad.org/YAjZUZoF) –

Смежные вопросы