Новичок в Python. Мне нужно написать программу, которая создает таблицу, отображающую баланс типа «кредитная карта», за сколько месяцев требуется, чтобы погасить баланс с минимальным платежом. Думаю, я понял большую часть этого, но у меня проблема.

Проблема в том, как завершить цикл после выплаты баланса, при этом сделав окончательный платеж равным остатку. Так как минимальный платеж превышает остаток последнего платежа, я получаю отрицательное число в качестве конечного остатка. Я попытался исправить это, добавив в свой цикл оператор if-then, но в итоге получил платеж в размере 0,04, а результат примера мне предоставили с нулями по цене 3,80 доллара.

Код, который у меня есть:

listedPrice = 200

print("%10s%20s%20s%20s%10s%20s" % \
     ("Month", "Starting Balance", "Interest to Pay", "Principal to Pay", "Payment", "Ending Balance"))

downPayment = listedPrice / 10
balance = listedPrice - downPayment
interestRate = .12
interest = (balance * interestRate) / 12 
payment = (5 * balance) / 100
principal = payment - interest
numPayments = 24

for month in range(1, numPayments +1):
    balance = balance
    interest = balance / 100
    principal = payment - interest
    endBalance = balance - payment + interest
    print("%10s%20.2f%20.2f%20.2f%10.2f%20.2f" % \
        (month, balance, interest, principal, payment, endBalance))
    if endBalance < payment:
        payment = endBalance
    balance = endBalance

В качестве альтернативы я попробовал следующее с циклом while:

month = 1

while balance > 0.0:
    balance = balance
    interest = balance / 100
    principal = payment - interest
    endBalance = balance - payment + interest
    print("%10s%15.2f%15.2f%15.2f%15.2f%15.2f" % \
        (month, balance, interest, principal, payment, endBalance))
    if endBalance < payment:
        payment = endBalance
        balance=endBalance
        month+=1
        break
    balance = endBalance
    month +=1

Проблема в том, что последняя строка таблицы заканчивается выплатой 9 долларов и конечным балансом 3,80 доллара. В нем должна быть еще одна строка с платежом 3,80 и конечным балансом 0.

Спасибо Заку Мохаммеду за идею команды break!

0
AfterVirtue 24 Ноя 2020 в 02:57

2 ответа

Лучший ответ

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

Хотя я знаю, что это не самый «чистый» или «самый эффективный» код, я все же могу объяснить, что не так и что я сделал, чтобы исправить это, и я уверен, что вы можете пойти дальше и найти другие решения.

Вот как я решил два ваших вопроса:

listedPrice = 200

print("%10s%20s%20s%20s%10s%20s" % \
     ("Month", "Starting Balance", "Interest to Pay", "Principal to Pay", "Payment", "Ending Balance"))

downPayment = listedPrice / 10
balance = listedPrice - downPayment
interestRate = .12
interest = (balance * interestRate) / 12 
payment = (5 * balance) / 100
originalPayment = (5 * balance) / 100
principal = payment - interest
numPayments = 24

for month in range(1, numPayments +1):
    balance = balance
    interest = balance / 100
    principal = payment - interest
    endBalance = balance - payment + interest
    if payment == 9:
        print("%10s%20.2f%20.2f%20.2f%10.2f%20.2f" % \
            (month, balance, interest, principal, payment, endBalance))
        if endBalance < payment:
            payment = endBalance
        balance = endBalance
    elif payment <= originalPayment and balance != 0:
        payment = balance + interest
        principal = balance
        endBalance = 0
        print("%10s%20.2f%20.2f%20.2f%10.2f%20.2f" % \
            (month, balance, interest, principal, payment, endBalance))
        balance = endBalance
        print("\n It took",month,"months to pay off your credit card.")

Это происходит с 1 по 23 месяц; с 24 месяца будет 0 долларов и отображаться не должно. Затем он позволяет узнать, сколько месяцев потребовалось.

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

Примечание. Я добавил проценты 0,04 для последнего платежа, так что это 3,84 платежа. Если по какой-либо причине предполагается, что в последний платеж не включены проценты, вы можете просто вычесть их из последнего < em> 'оператор elif' . Я заметил, что вы говорите, что не хотите этого, хотя в своем первоначальном вопросе.

Но поскольку это кредитная карта, я думаю, что технически последний платеж должен приносить проценты, даже если это четыре цента. Но если в ваших инструкциях не должно быть интереса к последнему платежу, просто удалите его из последнего цикла в 'for statement' .

Тогда тебе должно быть хорошо!

0
NewCoder18 24 Ноя 2020 в 02:14

Я был бы рад помочь, во-первых, я не смог воспроизвести проблему, которая возникла у вас, с неправильным отображением $ 3,80, но вы были почти у цели. Я добавил перерыв после оператора if, который выйдет из цикла:

if endBalance < payment:
        payment = endBalance
        break
0
Zach Mohammed 24 Ноя 2020 в 00:07
64978363