Новичок в 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!
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' .
Тогда тебе должно быть хорошо!
Я был бы рад помочь, во-первых, я не смог воспроизвести проблему, которая возникла у вас, с неправильным отображением $ 3,80, но вы были почти у цели. Я добавил перерыв после оператора if, который выйдет из цикла:
if endBalance < payment:
payment = endBalance
break
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.