1
resposta

solução alternativa para o contador de cédulas únicas

Ao mesmo tempo que é possível sacar números ímpares, alguns números pares podem dar erro. Tanto que na própria saída esperada há um erro, já que o valor era 188 e apenas 187 são apresentados na solução.
Minha sugestão para evitar esse erro:

def mostra_cedulas(notas: dict) -> None:
    print("\nCédulas disponíveis: ")
    for nota in notas:
        print(f"R$ {nota},00")

def mostra_saque(notas: dict) -> None:
    print("Cédulas entregues:")
    for nota in notas:
        print(f"{notas[nota]} de R$ {nota},00")

def verifica_saque(valor: int) -> bool:
    return valor <= 0 or valor == 1 or valor == 3

def verifica_terminal(numero: int) -> bool:
    return numero % 10 in {1, 3, 6, 8}

def calcula_saque(valor: int, notas: dict) -> dict:
    if verifica_terminal(valor):
        valor -= 4
        notas[2] += 2
    for nota in notas:        
        if valor > 0:
            notas[nota] += valor // nota
            valor %= nota
    return notas

def main():
    cedulas = {
        200: 0, 
        100: 0, 
        50: 0, 
        20 : 0, 
        10: 0, 
        5: 0, 
        2: 0}
    
    try:
        mostra_cedulas(cedulas)
        valor = int(input("\nDigite o valor do saque: "))
        if verifica_saque(valor):
            raise ValueError
        saque = calcula_saque(valor, cedulas)
        mostra_saque(saque)
    except ValueError:
        print("Digite um valor numérico válido.")

main()
1 resposta

Oi, Gabriel! Como vai?

Agradeço por compartilhar.

Gostei da sua análise e da solução proposta, importante como você observou a inconsistência no valor final apresentado e pensou em uma lógica alternativa para evitar esse erro no cálculo das cédulas.

Sua abordagem ao tratar o terminal do número mostra atenção aos detalhes do problema e cuidado com a experiência de quem usa o sistema.

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