1
resposta

Contador de cédulas únicas

Fiz diferente do que o enunciado pedia, visto que caso fosse informado qualquer valor ímpar, seria informado que não é possível realizar o saque. Mesmo que aja uma combinação possível.
Exemplo: Sacar 7 reais = 1 nota R$ 5,00 e 1 nota R$ 2,00.
Se seguir a lógica do % 2 == 0, esse saque seria impossível.

notas_disponíveis = {
    100 : "R$ 100,00",
    50  : "R$ 50,00",
    20  : "R$ 20,00",
    10  : "R$ 10,00",
    5   : "R$ 5,00",
    2   : "R$ 2,00"
}

# Crias as listas que terão seus componentes adicionados, caso o valor informado seja válido e possível de saque.
nota_sacada: list[str] = []
quantidade_sacada: list[int] = []

def informacao_notas() -> None:
    """Informa as notas que o sistema tem disponível para sacar."""

    print("Notas disponíveis para saque:\n")

    for valor in notas_disponíveis.values():
        print(valor)

    print()

def valor_saque(prompt: int) -> int:
    """Exibe as notas disponíveis e confere um valor de saque. Caso o valor seja inválido, o programa pede o valor novamente."""
    
    informacao_notas()

    while True:
        try:
            valor = int(input(prompt).strip())
            break

        except ValueError:
            print("\nO valor inserido é inválido.")
            print("Tente novamente.\n")

    return valor

def contagem_notas() -> None:
    """Pede o valor do saque e o rateia para verificar a quandidate de notas necessárias e seu valor."""

    saque = valor_saque("Insira o valor que deseja sacar: ")
    
    for key,value in notas_disponíveis.items():

        while saque >= key:
            notas = int(saque / key)
            saque = saque - (notas * key)
            nota_sacada.append(value)
            quantidade_sacada.append(notas)
            
            if saque == 0:
                for nota, qtd in zip(nota_sacada, quantidade_sacada):
                 print(f"Nota: {nota} - Quantidade: {qtd}")

    # Caso o resto não seja 0, o programa informa que não é possível realizar o saque.
    if saque != 0:
        print("\nNão é possível sacar o montante informado.")
        print("Finalizando programa...\n")
        exit()  

contagem_notas()
1 resposta

Oi, Felipe! Como vai?

Do jeito que você explicou, sua lógica faz sentido e mostra atenção às combinações de notas, algo importante nesse tipo de exercício. Gostei de como você lidou com valores ímpares permitindo combinações válidas sem bloquear o saque.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!