Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Escreva um programa para calcular o saldo do cartão de crédito após um ano, se uma pessoa paga apenas o pagamento mensal mínimo exigido pela empresa do cartão de crédito a cada mês

Problema extraído do curso do MIT de Python:

Escreva um programa para calcular o saldo do cartão de crédito após um ano, se uma pessoa paga apenas o pagamento mensal mínimo exigido pela empresa do cartão de crédito a cada mês.

As seguintes variáveis contêm valores conforme descrito abaixo:

balance - o saldo em dívida no cartão de crédito

annualInterestRate - taxa de juros anual como um decimal

monthlyPaymentRate - taxa de pagamento mensal mínima como um decimal

Para cada mês, calcule as declarações sobre o pagamento mensal e saldo restante. No final de 12 meses, imprima o saldo restante. Certifique-se de imprimir no máximo dois dígitos decimais de precisão - portanto, imprima Saldo remanescente : 813.41

ao invés de Saldo remanescente: 813.4141998135

Portanto, o seu programa apenas imprime uma coisa: o saldo restante no final do ano no formato:

Saldo remanescente: 4784.0

Um resumo da matemática necessária é encontrado abaixo:

Monthly interest rate= (Annual interest rate) / 12.0

Minimum monthly payment = (Minimum monthly payment rate) x (Previous balance)

Monthly unpaid balance = (Previous balance) - (Minimum monthly payment)

Updated balance each month = (Monthly unpaid balance) + (Monthly interest rate x Monthly unpaid balance)

Exemplo de saída correta:

For balance = 3329, annual interest rate of 0.2, result is: 310

Entendendo o problema (uma tabela):

https://ibb.co/joXmxS

Minha tentativa:

annualInterestRate = 0.18 #exemplo
Monthly_interest_rate = annualInterestRate/12.0
monthlyPaymentRate = 0.02
Previous_balance =5000
#mes_0

Updated_balance_each_month = 0
Monthly_unpaid_balance =0
mes = 0
while mes < 12:
    Monthly_unpaid_balance = (Previous_balance) - ( (monthlyPaymentRate) * (Previous_balance))

    Updated_balance_each_month += (Monthly_unpaid_balance) + (Monthly_interest_rate * Monthly_unpaid_balance)
    print(Updated_balance_each_month)

    mes += 1

print("Monthly_unpaid_balance : {0:.2f}".format(Monthly_unpaid_balance))

Meu código, aparentemente, só calcula no mês 0...

5 respostas

Oi, Edson! Então, não consegui entender muito bem, você poderia mandar o enunciado original lá do site do MIT? Pode ser um screenshot, também :)

@Yan Orestes:

Eu gerei dois PDFs com a descrição do problema e a questão. Fiz os uploads:

https://ufile.io/oymr8

https://ufile.io/orx22

Espero que ajude!

solução!

Acho que entendi, Edson, valeu! Mas olha, em primeiro lugar, se eu entendi bem, esse exemplo que você deu de saída correta não faz sentido, se tomarmos 0.2 para annualInterestRate, 0.02 para monthlyPaymentRate e 3329 pra balança original.

De qualquer jeito, o problema do seu código é que você não está recalculando a variável Previous_balance, por isso está sempre rodando com o mesmo código. Se você as linhas

Updated_balance_each_month += (Monthly_unpaid_balance) + (Monthly_interest_rate * Monthly_unpaid_balance)
print(Updated_balance_each_month)

### código omitido...

print("Monthly_unpaid_balance : {0:.2f}".format(Monthly_unpaid_balance))

para

Previous_balance = (Monthly_unpaid_balance) + (Monthly_interest_rate * Monthly_unpaid_balance)
print(Previous_balance)

### código omitido...

print("Monthly_unpaid_balance : {0:.2f}".format(Previous_balance))

seu código já deve funcionar bem, Mas lembrando que para rodar nesses testes online tem que bater tudo certinho com o planejado. Pelo o que eu vi, o único print() que é pra ter é no final.

@Yan Orestes:

Obrigado! Olha o erro no teste:

https://ibb.co/k7pQrn

Código que passou nos testes:

Updated_balance_each_month = 0
Monthly_unpaid_balance =0
mes = 0
while mes < 12:
    Monthly_unpaid_balance = (balance) - ( (monthlyPaymentRate) * (balance))

    balance= (Monthly_unpaid_balance) + ((annualInterestRate/12) * Monthly_unpaid_balance)
    #print("Previous_balance : {0:.2f}".format(balance))

    mes += 1

print("Previous_balance : {0:.2f}".format(balance))