Рассчитать промежуточную сумму во время цикла for - Python - PullRequest
0 голосов
/ 15 февраля 2011

Редактировать: Ниже приведен мой рабочий код на основе полученных отзывов / ответов.

Этот вопрос вытекает из моего предыдущего вопроса, который возник при изучении Python / CS с использованием открытого учебного программного обеспечения из MIT. - Смотрите мой предыдущий вопрос здесь -

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

Оригинальный код

balance = float(raw_input("Outstanding Balance: "))
interestRate = float(raw_input("Interest Rate: "))
minPayRate = float(raw_input("Minimum Monthly Payment Rate: "))

for month in xrange(1, 12+1):
    interestPaid = round(interestRate / 12.0 * balance, 2)
    minPayment = round(minPayRate * balance, 2)
    principalPaid = round(minPayment - interestPaid, 2)
    remainingBalance = round(balance - principalPaid, 2)


    print 'Month: %d' % (month,)
    print 'Minimum monthly payment: %.2f' % (minPayment,)
    print 'Principle paid: %.2f' % (principalPaid,)
    print 'Remaining balance: %.2f' % (remainingBalance,)

    balance = remainingBalance

    if month in xrange(12, 12+1):
        print 'RESULTS'
        print 'Total amount paid: '
        print 'Remaining balance: %.2f' % (remainingBalance,)

Проблема в том, что я не смог выяснить, как сохранить промежуточный итог выплаченных сумм. Я попытался добавить totalPaid = round(interestPaid + principalPaid, 2), но это привело к итоговой сумме за один месяц, и я не могу заставить ее сохранять это значение для каждого месяца, а затем складывать их все в конце, чтобы распечатать.

Также я знаю, что итоговая сумма должна быть 1131.12

Я нашел много примеров, когда каждое значение известно через список, но я не могу экстраполировать это правильно.

Фиксированный код

balance = float(raw_input("Outstanding Balance: "))
interestRate = float(raw_input("Interest Rate: "))
minPayRate = float(raw_input("Minimum Monthly Payment Rate: "))
totalPaid = 0

for month in xrange(1, 12+1):
    interestPaid = round(interestRate / 12.0 * balance, 2)
    minPayment = round(minPayRate * balance, 2)
    principalPaid = round(minPayment - interestPaid, 2)
    remainingBalance = round(balance - principalPaid, 2)
    totalPaid += round(minPayment, 2)

    print 'Month: %d' % (month,)
    print 'Minimum monthly payment: %.2f' % (minPayment,)
    print 'Principle paid: %.2f' % (principalPaid,)
    print 'Remaining balance: %.2f' % (remainingBalance,)

    balance = remainingBalance

    if month in xrange(12, 12+1):
        print 'RESULTS'
        print 'Total amount paid: %.2f' % (totalPaid,)
        print 'Remaining balance: %.2f' % (remainingBalance,)

Ответы [ 4 ]

2 голосов
/ 15 февраля 2011

Перед циклом инициализируйте переменную для накопления значения:

total_paid = 0

И затем, в теле вашего цикла, добавьте к нему соответствующее количество.Вы можете использовать оператор += для добавления к существующей переменной, например,

total_paid += 1

- это краткая форма для total_paid = total_paid + 1.Вы не хотите давать total_paid новое значение на каждой итерации, скорее вы хотите добавить к его существующему значению.

Я не уверен в специфике вашей проблемы, но это общая формадля накопления значения во время цикла.

1 голос
/ 15 февраля 2011

Вы всегда вносите минимальный платеж?Просто используйте minPayment вместо того, чтобы снова вычислять эту математику.Держите промежуточный итог, затем напечатайте его после цикла.

balance = float(raw_input("Outstanding Balance: "))
interestRate = float(raw_input("Interest Rate: "))
minPayRate = float(raw_input("Minimum Monthly Payment Rate: "))
paid = 0

for month in xrange(1, 12+1):
    interestPaid = round(interestRate / 12.0 * balance, 2)
    minPayment = round(minPayRate * balance, 2)
    principalPaid = round(minPayment - interestPaid, 2)
    remainingBalance = round(balance - principalPaid, 2)
    paid += minPayment

    print  # Make the output easier to read.
    print 'Month: %d' % (month,)
    print 'Minimum monthly payment: %.2f' % (minPayment,)
    print 'Principle paid: %.2f' % (principalPaid,)
    print 'Remaining balance: %.2f' % (remainingBalance,)

    balance = remainingBalance

print
print 'RESULTS'
print 'Total amount paid:', paid
print 'Remaining balance: %.2f' % (remainingBalance,)

Также обратите внимание, что диапазон имеет ровно одно значение, поэтому вы просто проверите месяц == 12, ноздесь просто нет необходимости.

0 голосов
/ 15 февраля 2011

звучит так, как будто вы были близко. Проблема в том, что вы перезаписывали общее количество каждый раз. Попробуйте что-то вроде этого:

totalPaid = totalPaid + round(interestPaid + principalPaid, 2)
0 голосов
/ 15 февраля 2011

Вы фактически должны инициализировать totalPaid равным 0, а затем

totalPaid = round(interestPaid + principalPaid, 2) + totalPaid

Внутри циклаВаша проблема в том, что вы не накапливаете общее количество, а просто устанавливаете новое на каждой итерации.

...