Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Fala, Marinaldo! Tudo bom?
Agradeço por trazer sua solução para o fórum!
Curti demais como trabalhou a programação dinâmica para calcular a menor quantidade de cédulas em Python, entendeu perfeitamente a importância da validação robusta da entrada para evitar erros de formato e usou bem a função formatar_reais para deixar a saída amigável ao usuário.
Algo bem legal para complementar é simplificar a reconstrução da solução usando collections.Counter, deixando o código mais enxuto. Dessa maneira:
from collections import Counter
def calcular_cedulas(valor):
minimo = [float("inf")] * (valor + 1)
ultima_cedula = [0] * (valor + 1)
minimo[0] = 0
for total in range(1, valor + 1):
for cedula in CEDULAS:
if cedula <= total:
quantidade = minimo[total - cedula] + 1
if quantidade < minimo[total]:
minimo[total] = quantidade
ultima_cedula[total] = cedula
if minimo[valor] == float("inf"):
return None
resultado = []
restante = valor
while restante:
cedula = ultima_cedula[restante]
resultado.append(cedula)
restante -= cedula
return Counter(resultado)
Isso faz com que a contagem das cédulas seja automática e mais legível.
E algumas boas práticas que você pode adotar são:
utils.py. Continue postando as suas soluções! Além de ganhar pontos de XP na plataforma, você pode ajudar outros estudantes no fórum.
Ah, uma pergunta: você prefere evoluir esse projeto para simular um caixa eletrônico completo com múltiplos usuários ou manter apenas o cálculo de cédulas para focar na lógica de programação dinâmica?
Fico à disposição! E se precisar, conte sempre com o apoio do fórum.
Abraço e bons estudos!